我有这样的数据帧:
ID1 ID2
0 foo bar
1 fizz buzz
Run Code Online (Sandbox Code Playgroud)
而另一个像这样:
ID1 ID2 Count Code
0 abc def 1 A
1 fizz buzz 5 A
2 fizz1 buzz2 3 C
3 foo bar 6 Z
4 foo bar 6 Z
Run Code Online (Sandbox Code Playgroud)
我想要做的是过滤第二个数据帧,其中ID1和ID2匹配第一个数据帧中的一行,每当匹配时我想从第一个数据帧中删除该行以避免重复.这将产生一个如下所示的数据框:
ID1 ID2 Count Code
1 fizz buzz 5 A
3 foo bar 6 Z
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过嵌套for循环,逐步遍历所有行,并在我得到匹配时从第一帧手动删除一行但我想知道是否有更多的pythonic方法来做到这一点.我没有大熊猫的经验,所以可能有一个更清洁的方法,我不知道.我之前使用.isin()但不得不废弃它.每个ID对最多可以存在于数据帧中N次,我需要过滤后的帧包含一对0到N个实例.
如果只有相同的列用于两者,则使用mergewith :drop_duplicatesdf
df = pd.merge(df1,df2.drop_duplicates())
print (df)
ID1 ID2 Count Code
0 foo bar 6 Z
1 fizz buzz 5 A
Run Code Online (Sandbox Code Playgroud)
如果只需要在ID列中检查dupe :
df = pd.merge(df1,df2.drop_duplicates(subset=['ID1','ID2']))
print (df)
ID1 ID2 Count Code
0 foo bar 6 Z
1 fizz buzz 5 A
Run Code Online (Sandbox Code Playgroud)
如果更多列重叠添加参数on:
df = pd.merge(df1, df2.drop_duplicates(), on=['ID1','ID2'])
Run Code Online (Sandbox Code Playgroud)
如果没有删除欺骗行:
df = pd.merge(df1,df2)
print (df)
ID1 ID2 Count Code
0 foo bar 6 Z
1 foo bar 6 Z
2 fizz buzz 5 A
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2444 次 |
| 最近记录: |