gpt4 book ai didi

python - 将 pandas df 与 how=inner 和非唯一项合并

转载 作者:行者123 更新时间:2023-12-01 09:17:21 25 4
gpt4 key购买 nike

我有两个数据框,如下所示:

df1

     a     b     c
0 foo None qux
1 foo bar None
2 foo None None
3 foo None qux
4 foo None None

df2

     a     b     c
0 foo None qux
1 foo None qux
2 foo bar qux
3 foo bar None
4 foo bar None

我以为这样做

pd.merge(df1, df2, on=df1.columns.tolist(), how='inner')

会返回

     a     b     c
0 foo None qux
1 foo None qux
2 foo bar None

而是得到了这个:

     a     b     c
0 foo None qux
1 foo None qux
2 foo None qux
3 foo None qux
4 foo bar None
5 foo bar None

我可以合并 df1 和 df2 以仅找到这两者的交集吗?如何?我不明白内部联接如何返回比单独 df 中更多的项目。

最佳答案

Merge 不知道如何区分这些相同的行,因此它们会被重复多次。

我建议使用临时列来记录cumcount,执行merge-ing,然后删除临时列。

df1['d'] = df1.groupby(df1.columns.tolist()).cumcount()
df2['d'] = df2.groupby(df2.columns.tolist()).cumcount()

df1.merge(df2, how='inner').drop('d', 1)

a b c
0 foo None qux
1 foo bar None
2 foo None qux

这是有效的,因为 df1df2 现在有第四个指示列来区分重复项:

print(df1)
a b c d
0 foo None qux 0
1 foo bar None 0
2 foo None None 0
3 foo None qux 1
4 foo None None 1

print(df2)
a b c d
0 foo None qux 0
1 foo None qux 1
2 foo bar qux 0
3 foo bar None 0
4 foo bar None 1

关于python - 将 pandas df 与 how=inner 和非唯一项合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51119086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com