インデックスに基づいて他のデータフレームと一致するようにデータフレームを拡張する方法

ジオゴシルバ

A学生情報を含む次のデータフレームがあります

student_id  signup_year age
1           2010        18
2           2011        19
3           2015        25

そして、B学生の学業成績を含む次のデータフレーム

student_id  discipline    grade  finishing_date
1           math          18     5/3/2011
1           science       15     5/3/2011
2           math          14     10/4/2013
2           science       13     10/4/2013
3           math          12     11/5/2016
3           science       11     12/6/2016

Bでは、次の条件で、1年生の生徒の成績を計算したいと思います。

grade = 0 if finishing_year - signup_year > 1 else grade

出力(テーブルB)は次のようになります。

student_id  discipline    grade  finishing_date
1           math          18     5/3/2011
1           science       15     5/3/2011
2           math          0      10/4/2013
2           science       0      10/4/2013
3           math          12     11/5/2016
3           science       11     12/6/2016

問題は、この操作をベクトル化することです(私のデータセットには+500 000サンプルが含まれています)

私が試したこと:

def vectorized(A, B):

    B["grade"] = np.where(
        pd.DatetimeIndex(B["finishing_date"]).year - A["signup_year"]
        > 1,
        B["grade"] * 0,
        B["grade"],
    )
    return grades_df

ただし、A["signup_year"]と同じ長さがないため、これは機能しませんB["finishing_date"]).yearどうすればこれにアプローチできますか?

ジェズリール

使用Series.mapGETのためSeriesのように同じ長さを持つBことによりstudent_id

B["grade"] = np.where(
       pd.to_datetime(B["finishing_date"]).dt.year - 
       B["student_id"].map(A.set_index('student_id')['signup_year'])
       > 1,
       0,
       B["grade"])

print (B)
   student_id discipline  grade finishing_date
0           1       math     18       5/3/2011
1           1    science     15       5/3/2011
2           2       math      0      10/4/2013
3           2    science      0      10/4/2013
4           3       math     12      11/5/2016
5           3    science     11      12/6/2016

詳細

print (B["student_id"].map(A.set_index('student_id')['signup_year']))
0    2010
1    2010
2    2011
3    2011
4    2015
5    2015
Name: student_id, dtype: int64

もう1つのアイデアはmerge、左結合での使用です。

B["grade"] = np.where(
       pd.to_datetime(B["finishing_date"]).dt.year - 
       B.merge(A, on="student_id", how='left')['signup_year']
       > 1,
       0,
       B["grade"])

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

特定の条件に一致するデータフレーム セルに基づいて列名にインデックスを付けて出力する方法

分類Dev

元のデータフレーム列と一致するように拡張/スライスされたサブセットデータフレーム

分類Dev

R-既存の列と一致する値のインデックスに基づいて新しい列データフレームを作成します

分類Dev

別のデータフレームとの(排他的な)部分一致に基づいてデータフレームから行を削除する

分類Dev

他の2つのデータフレームのインデックスに基づいて2つのデータフレームをマージする

分類Dev

列に基づくデータフレームとインデックスに基づく他のデータフレームに関数を適用する

分類Dev

他のデータフレームからの一致する値に基づいて、データフレームに新しい変数を作成する

分類Dev

列の各要素について、他のデータフレームの一致する列に基づいてパンダデータフレームのサブセット/スライスを返しますか?

分類Dev

他のデータフレームの行と列の情報に基づいてデータフレームにインデックスを付ける

分類Dev

別のデータフレームのインデックスに基づいて、データフレームからインデックスを保持する

分類Dev

列名が部分的に一致する別のデータフレームに基づいて、あるデータフレームにインデックスを付ける

分類Dev

列名が部分的に一致する別のデータフレームに基づいて、あるデータフレームにインデックスを付ける

分類Dev

別のデータフレームとの一致に基づいて、データフレームに新しい列を作成する

分類Dev

別のデータフレームの一致する値に基づいてデータフレームをサブセット化するPyspark1.6.1

分類Dev

複数の基準に一致することにより、あるデータフレームのレコードを別のデータフレームに基づいてフィルタリングする

分類Dev

他のパンダデータフレームからの一致する列に基づいてパンダ列を更新する最速の方法

分類Dev

2番目のデータフレームの一致する列に基づいてパンダのデータフレームを更新します

分類Dev

クラスに基づいてベクトルをデータフレームに一致させる方法

分類Dev

パンダのインデックス値に基づいてデータフレームを複数のデータフレームに分離する

分類Dev

値に基づいてデータフレームを拡張する

分類Dev

連続したインデックスに基づいてデータフレームを分割する方法は?

分類Dev

データフレーム値に基づいて列名とインデックスを取得する

分類Dev

一致する列に基づいて、あるデータフレームから別のデータフレームに行を移動する

分類Dev

列インデックスに基づいてデータフレーム列の名前を変更する

分類Dev

日時インデックスの条件に基づいてデータフレーム行を削除する

分類Dev

満たされている2つの条件のいずれかに基づいて列/インデックスを作成するにはどうすればよいですか(同じデータフレーム内で一致するペアのクラスタリングを有効にするため)?

分類Dev

別のデータフレームとの一致に基づいてデータフレームに新しいブール列を作成すると、「置換にはx行、データにはy」というRエラーが発生します。

分類Dev

Rの2つの一致条件に基づいて、あるデータフレームから別のデータフレームに値を追加する

分類Dev

他の列スパークの値に基づいてデータフレームに列を追加する方法

Related 関連記事

  1. 1

    特定の条件に一致するデータフレーム セルに基づいて列名にインデックスを付けて出力する方法

  2. 2

    元のデータフレーム列と一致するように拡張/スライスされたサブセットデータフレーム

  3. 3

    R-既存の列と一致する値のインデックスに基づいて新しい列データフレームを作成します

  4. 4

    別のデータフレームとの(排他的な)部分一致に基づいてデータフレームから行を削除する

  5. 5

    他の2つのデータフレームのインデックスに基づいて2つのデータフレームをマージする

  6. 6

    列に基づくデータフレームとインデックスに基づく他のデータフレームに関数を適用する

  7. 7

    他のデータフレームからの一致する値に基づいて、データフレームに新しい変数を作成する

  8. 8

    列の各要素について、他のデータフレームの一致する列に基づいてパンダデータフレームのサブセット/スライスを返しますか?

  9. 9

    他のデータフレームの行と列の情報に基づいてデータフレームにインデックスを付ける

  10. 10

    別のデータフレームのインデックスに基づいて、データフレームからインデックスを保持する

  11. 11

    列名が部分的に一致する別のデータフレームに基づいて、あるデータフレームにインデックスを付ける

  12. 12

    列名が部分的に一致する別のデータフレームに基づいて、あるデータフレームにインデックスを付ける

  13. 13

    別のデータフレームとの一致に基づいて、データフレームに新しい列を作成する

  14. 14

    別のデータフレームの一致する値に基づいてデータフレームをサブセット化するPyspark1.6.1

  15. 15

    複数の基準に一致することにより、あるデータフレームのレコードを別のデータフレームに基づいてフィルタリングする

  16. 16

    他のパンダデータフレームからの一致する列に基づいてパンダ列を更新する最速の方法

  17. 17

    2番目のデータフレームの一致する列に基づいてパンダのデータフレームを更新します

  18. 18

    クラスに基づいてベクトルをデータフレームに一致させる方法

  19. 19

    パンダのインデックス値に基づいてデータフレームを複数のデータフレームに分離する

  20. 20

    値に基づいてデータフレームを拡張する

  21. 21

    連続したインデックスに基づいてデータフレームを分割する方法は?

  22. 22

    データフレーム値に基づいて列名とインデックスを取得する

  23. 23

    一致する列に基づいて、あるデータフレームから別のデータフレームに行を移動する

  24. 24

    列インデックスに基づいてデータフレーム列の名前を変更する

  25. 25

    日時インデックスの条件に基づいてデータフレーム行を削除する

  26. 26

    満たされている2つの条件のいずれかに基づいて列/インデックスを作成するにはどうすればよいですか(同じデータフレーム内で一致するペアのクラスタリングを有効にするため)?

  27. 27

    別のデータフレームとの一致に基づいてデータフレームに新しいブール列を作成すると、「置換にはx行、データにはy」というRエラーが発生します。

  28. 28

    Rの2つの一致条件に基づいて、あるデータフレームから別のデータフレームに値を追加する

  29. 29

    他の列スパークの値に基づいてデータフレームに列を追加する方法

ホットタグ

アーカイブ