gpt4 book ai didi

python - Pandas :合并数据框而不创建新列

转载 作者:太空狗 更新时间:2023-10-30 02:27:23 25 4
gpt4 key购买 nike

我有 2 个具有相同列的数据框:

df1 = pd.DataFrame([['Abe','1','True'],['Ben','2','True'],['Charlie','3','True']], columns=['Name','Number','Other'])
df2 = pd.DataFrame([['Derek','4','False'],['Ben','5','False'],['Erik','6','False']], columns=['Name','Number','Other'])

给出:

     Name Number Other
0 Abe 1 True
1 Ben 2 True
2 Charlie 3 True

    Name Number  Other
0 Derek 4 False
1 Ben 5 False
2 Erik 6 False

我想要一个输出数据框,它是基于“名称”的两者的交集:

output_df = 
Name Number Other
0 Ben 2 True
1 Ben 5 False

我已经尝试了一个基本的 pandas 合并但是返回是不可取的:

pd.merge(df1,df2,how='inner',on='Name') = 
Name Number_x Other_x Number_y Other_y
0 Ben 2 True 5 False

这些数据帧非常大,所以我更愿意使用一些 pandas 魔法来保持快速。

最佳答案

您可以使用 concat然后按 isin 过滤与 numpy.intersect1d使用 boolean indexing :

val = np.intersect1d(df1.Name, df2.Name)
print (val)
['Ben']

df = pd.concat([df1,df2], ignore_index=True)
print (df[df.Name.isin(val)])
Name Number Other
1 Ben 2 True
4 Ben 5 False

val 的另一种可能解决方案是集合的intersection:

val = set(df1.Name).intersection(set(df2.Name))
print (val)
{'Ben'}

然后可以将索引重置为单调:

df = pd.concat([df1,df2])
print (df[df.Name.isin(val)].reset_index(drop=True))
Name Number Other
0 Ben 2 True
1 Ben 5 False

关于python - Pandas :合并数据框而不创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41262379/

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