以下の2つのデータフレームがあります。
df1:
ID list value listA valueA listB valueB
1 list1 D1 list1 D1 list1 D1
2 list2 D1
3 list1 D3 list2 D3
4 list2 D1 list2 D1 list1 D3
5 list2 D2 list2 D2 list2 D2
6 list2 D3 list1 D3 list1 D4
df2:
list1 list2
D1 456
D2 D2
33 D31
D4 245
EE D5
D5 D6
以下の検証に基づいて最終的なdfを生成しようとしています
-> df1のlistの値がlist1の場合、df1の "value"の対応するデータは、df23のlist1列の値の1つである必要があります。
-> df1のlistの値がlist2の場合、df1の「value」の対応するデータは、df2のlist2列の値の1つである必要があります。
期待される結果df:
ID list value listA valueA listB valueB Error
1 list1 D1 list1 D1 list1 D1 no mismatch
2 list2 D1 valueA mismatch
3 list1 D3 list2 D3 value, valueB mismatch
4 list2 D1 list2 D1 list1 D3 value,valueA&valueB mismatch
5 list2 D2 list2 D2 list2 D2 no mismatch
6 list2 D3 list1 D3 list1 D4 value, valueA mismatch
ブールマスクのGroupBy.transform
カスタム関数で使用しisin
、次のように値を設定しますnumpy.where
。
m = df1.groupby('list')['value'].transform(lambda x: x.isin(df2[x.name]))
df1['Error'] = np.where(m, 'No mismatch with df2','list mismatch with df2')
print (df1)
ID list value Error
0 1 list1 D1 No mismatch with df2
1 2 list1 D2 No mismatch with df2
2 3 list1 D3 list mismatch with df2
3 4 list2 D1 list mismatch with df2
4 5 list2 D2 No mismatch with df2
5 6 list2 D3 list mismatch with df2
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加