別のグループ値に基づいて1つのデータフレームにデータを入力します

ルイスフェルナンドプットサウジエ

データフレームデータが1つあります

   groupId service local
0        1      s1    l1
1        1      s1    l1
2        1      s2    l2
3        1      s3    l3
4        2      s2    l2
5        2      s3    l3
6        3      s1    l1
7        3      s2    l2

データフレームに関する質問があります

   q1  q2  howManyGroups
0  s1  l1              0
1  s1  s2              0
2  s2  l2              0
3  s3  l3              0
4  s3  l1              0

表示されるデータ内のグループの数に基づいて質問の発生をカウントしたいと思います。

   q1  q2  howManyGroups
0  s1  l1              2
1  s1  s2              2
2  s2  l2              3
3  s3  l3              2
4  s3  l1              1

私はこのコードを使用していますが、本当に遅いです:

for i,g in data.groupby('groupId'):
  for j,r in question.iterrows():
    if set(r[['q1','q2']].values).issubset(set( g.drop('groupId', axis=1).values.ravel())):
      question.loc[j,'howManyGroups'] += 1

編集:私の質問データフレームには、より多くの/より少ない列が含まれる場合がありq1 and q2ます。ある場合はそれだけq1、ある場合はあるq1, q2, q3...

Tボーンステーキを一枚ください

最初にデータを再形成して、groupIdごとに行を取得し、任意の列サービスまたはローカルで一意の値を取得することができます。

data_ = (data.set_index('groupId').stack()
             .reset_index(name='h')
             [['groupId', 'h']].drop_duplicates()
        )
print (data_.head())
   groupId   h
0        1  s1
1        1  l1
4        1  s2
5        1  l2
6        1  s3

次に、質問とmerge2回を使用します。1回目はq1(およびdata_のh)でのみ、どのgroupIdがq1に関連付けられているかを取得し、2回目はq2とgroupIdで、q1とq2の両方が同じグループにあることを確認します。最後groupbyに、マージしてgroupIdで使用する前にreset_indexで保持した元のインデックスnunique

question['howManyGroups'] = (question[['q1','q2']].reset_index()
                                .merge(data_, left_on=['q1'], right_on=['h'])
                                .merge(data_, left_on=['q2','groupId'], 
                                              right_on=['h','groupId'])
                                .groupby('index')['groupId'].nunique()
                            )
print (question)
   q1  q2  howManyGroups
0  s1  l1              2
1  s1  s2              2
2  s2  l2              3
3  s3  l3              2
4  s3  l1              1

気の数が不明な場合は、次のような方法を試すことができます。

df_tmp = (question.reset_index()
                  .merge(data_, left_on=['q1'], right_on=['h'])
         )

l_q = question.filter(regex='q\d*').columns.tolist()
l_q.remove('q1')

for q in l_q:
    df_tmp = df_tmp.merge(data_, left_on=[q,'groupId'], right_on=['h', 'groupId'])

question['howManyGroups'] = df_tmp.groupby('index')['groupId'].nunique()

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

別のデータフレームのセル参照に基づいて、1つのデータフレームの値を削除します

分類Dev

Rの使用-別のデータフレームのグループ最大値に基づいてデータフレームを再形成します

分類Dev

共通の値のペアに基づいてデータフレーム列に別のデータフレームを入力します

分類Dev

別の参照テーブルに基づいて、データフレームの1つの列に値を挿入します

分類Dev

別のデータフレームで見つかった範囲に基づいて、データフレームに列を入力します

分類Dev

値に基づいてデータフレームのすべての行に値を入力します

分類Dev

パンダの別のデータフレームからの同様の値に基づいて、データフレームの列に入力します

分類Dev

Pandasデータフレームを1つの列でグループ化し、別の列に基づいて行をドロップします

分類Dev

別のデータフレームの行の値に基づいて、1つのデータフレームの列を合計します

分類Dev

別のデータフレームの値に基づいてデータフレームを更新します

分類Dev

別のデータフレームの値に基づいて、1つのデータフレームの観測数をカウントします

分類Dev

Pyspark:1つの列の値に基づいて、あるデータフレームを別のデータフレームから減算します

分類Dev

データフレームの開始値/終了値に基づいてNA値を入力します

分類Dev

別のデータフレームに基づいてアイテムをグループ化するデータフレームを構築します

分類Dev

列の値に基づいて別のデータフレームから値を入力する

分類Dev

1つの列の最大値を(グループごとに)見つけて、Rの別のデータフレームに値を挿入します

分類Dev

Rデータフレームの変数に基づいてN個のラグを入力します

分類Dev

条件に基づいてデータフレーム行の値を入力します

分類Dev

2つの日時値に基づいてデータフレームをグループ化する

分類Dev

列の1つの値に基づいて、データフレームに行を追加します

分類Dev

別のデータフレーム列に基づいて1つの列を作成します

分類Dev

パンダ:1つの列の類似した値に基づいて、データフレームの空の列に複数のデータフレームの値を入力します

分類Dev

別のデータフレームの値に基づいてデータフレームエントリをグループ化する

分類Dev

2番目のデータフレームのNAに基づいて、1つのデータフレームの値をNAに変換します

分類Dev

2番目のデータフレームの行に基づいて1つのデータフレームのパンダに値を設定します

分類Dev

検索とルックアップあるデータフレームから別のデータフレームの値を検索し、パンダのルックアップ値に基づいて新しい列にデータを入力します

分類Dev

VBA:セル値に基づいてデータをフィルタリングし、別のシートに入力します

分類Dev

条件として存在する別のデータフレームセル値に基づいて1つのデータフレームをフィルタリングするにはどうすればよいですか?

分類Dev

tidyverseを使用して、別のデータフレームからのグループ化された値の範囲に基づいて、データフレームからグループ化された値を抽出します

Related 関連記事

  1. 1

    別のデータフレームのセル参照に基づいて、1つのデータフレームの値を削除します

  2. 2

    Rの使用-別のデータフレームのグループ最大値に基づいてデータフレームを再形成します

  3. 3

    共通の値のペアに基づいてデータフレーム列に別のデータフレームを入力します

  4. 4

    別の参照テーブルに基づいて、データフレームの1つの列に値を挿入します

  5. 5

    別のデータフレームで見つかった範囲に基づいて、データフレームに列を入力します

  6. 6

    値に基づいてデータフレームのすべての行に値を入力します

  7. 7

    パンダの別のデータフレームからの同様の値に基づいて、データフレームの列に入力します

  8. 8

    Pandasデータフレームを1つの列でグループ化し、別の列に基づいて行をドロップします

  9. 9

    別のデータフレームの行の値に基づいて、1つのデータフレームの列を合計します

  10. 10

    別のデータフレームの値に基づいてデータフレームを更新します

  11. 11

    別のデータフレームの値に基づいて、1つのデータフレームの観測数をカウントします

  12. 12

    Pyspark:1つの列の値に基づいて、あるデータフレームを別のデータフレームから減算します

  13. 13

    データフレームの開始値/終了値に基づいてNA値を入力します

  14. 14

    別のデータフレームに基づいてアイテムをグループ化するデータフレームを構築します

  15. 15

    列の値に基づいて別のデータフレームから値を入力する

  16. 16

    1つの列の最大値を(グループごとに)見つけて、Rの別のデータフレームに値を挿入します

  17. 17

    Rデータフレームの変数に基づいてN個のラグを入力します

  18. 18

    条件に基づいてデータフレーム行の値を入力します

  19. 19

    2つの日時値に基づいてデータフレームをグループ化する

  20. 20

    列の1つの値に基づいて、データフレームに行を追加します

  21. 21

    別のデータフレーム列に基づいて1つの列を作成します

  22. 22

    パンダ:1つの列の類似した値に基づいて、データフレームの空の列に複数のデータフレームの値を入力します

  23. 23

    別のデータフレームの値に基づいてデータフレームエントリをグループ化する

  24. 24

    2番目のデータフレームのNAに基づいて、1つのデータフレームの値をNAに変換します

  25. 25

    2番目のデータフレームの行に基づいて1つのデータフレームのパンダに値を設定します

  26. 26

    検索とルックアップあるデータフレームから別のデータフレームの値を検索し、パンダのルックアップ値に基づいて新しい列にデータを入力します

  27. 27

    VBA:セル値に基づいてデータをフィルタリングし、別のシートに入力します

  28. 28

    条件として存在する別のデータフレームセル値に基づいて1つのデータフレームをフィルタリングするにはどうすればよいですか?

  29. 29

    tidyverseを使用して、別のデータフレームからのグループ化された値の範囲に基づいて、データフレームからグループ化された値を抽出します

ホットタグ

アーカイブ