我只是试图了解基于特定列(例如,在此情况下,两个数据帧中都存在的列IDs
)来获取一个DataFrame的值,我期待基于df1
列IDs
和df2
列IDs
因此,如果df1.Keywords
的值在df2.Name
中,但df2.Name具有更多的值,则一个可能很重要的值会根据此值打印布尔值True
或False
。
注意: df1.Keywords isin df2.Name
基于IDs
在数据帧的展位上。
DataFrame首先 df1
>>> df1
IDs Keywords
0 1234 APPLE
1 1234 ORANGE
2 1234 LEMONS
3 5346 ORANGE
4 5346 STRAWBERRY
5 5346 BLUEBERRY
6 8793 TEA
DataFrame秒 df2
>>> df2
IDs Name
0 1234 APPLE ABCD
1 5346 APPLE ABCD
2 1234 STRAWBERRY YES
3 8793 ORANGE AVAILABLE
4 8793 TEA AVAILABLE
预期:
IDs Name New_Bools
1234 APPLE ABCD ONE True
5346 APPLE ABCD False
1234 STRAWBERRY YES False
8793 ORANGE AVAILABLE False
8793 TEA AVAILABLE False
8793 TEA COFFEE True
我尝试使用isin
创建MultiIndex,但无法正常工作。
index1 = pd.MultiIndex.from_arrays([df1[col] for col in ['IDs', 'Keywords']])
index2 = pd.MultiIndex.from_arrays([df2[col] for col in ['IDs', 'Name']])
df1.IDs.isin(df2.IDs)
答案 0 :(得分:1)
取决于您要匹配的内容(似乎只是问题的ID)假设您不关心匹配Name
和Keyword
列,然后使用{{3} }是合适的,如下所示应会为您提供布尔标志。
import pandas as pd
data = {'Id': [1, 2, 3, 1, 2, 3, 1, 2], 'Val': ['ABC', 'BCD', 'CDE', 'DEF', 'EFG', 'HIJ', 'IJK', 'JKL']}
data2 = {'Id': [1, 4, 7, 1, 2, 0, 1, 5], 'Val': ['ABC pld', 'BCD iod', 'CDE jkdf', 'DEF uyt', 'EFG erf', 'HIJ dfd', 'IJK mnb', 'JKL jkdf']}
df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
df['New_Bools'] = df['Id'].isin(df2['Id'])
print(df)
输出
Id Val Id_In_DF2
0 1 ABC True
1 2 BCD True
2 3 CDE False
3 1 DEF True
4 2 EFG True
5 3 HIJ False
6 1 IJK True
7 2 JKL True
如果您确实关心名称的匹配(您的预期输出),则需要执行其他字符串操作以隔离df2中的结果。继续本例中的数据,您将可以在字符串上使用apply
,lambda
和split
隔离水果。索引0
将为您带来成果。
最后,您可以使用遮罩比较两个帧之间的数据并输出布尔值。
# string manipulation for df2
df2['Name'] = df2['Val'].apply(lambda x: x.split(' ')[0])
# perform your eval like this:
df['New_Bools_Id_And_Name'] = ((df['Id'] == df2['Id']) & (df['Val'] == df2['Name']))
哪个输出
Id Val New_Bools New_Bools_Id_And_Name
0 1 ABC True True
1 2 BCD True False
2 3 CDE False False
3 1 DEF True True
4 2 EFG True True
5 3 HIJ False False
6 1 IJK True True
7 2 JKL True False
答案 1 :(得分:1)
在您merge
Keywords
和Name
之后,使用IDs
通过groupby
将IDs
与Name
关联起来,{{ 1}} apply
来计算lambda
是否属于其组中的关键字:
contains