gpt4 book ai didi

python - 在包含列表的单元格上合并两个 pandas DataFrame

转载 作者:太空宇宙 更新时间:2023-11-04 09:35:46 25 4
gpt4 key购买 nike

我有两个 DataFrame,一个包含一列,其单元格内有列表。这是一个例子:

DF 1 :
| A B
---+----------------------------
0 | 'A' ['A', 'B']
1 | 'B' ['B', 'D']
2 | 'C' ['D', 'E', 'F']

DF 2 :
| C D
---+----------------------------
0 | 'A' 'X'
1 | 'B' 'Y'
2 | 'C' 'Z'

这是设置 DataFrame 的代码:

df1 = pd.DataFrame({'A': ["A", "B", "C"], "B": [["A", "B"], ["B", "D"], ["D", "E", "F"]]})
df2 = pd.DataFrame({'C': ["A", "B", "C"], "D": ["X", "Y", "Z"]})

我想在 DF1 和 DF2 之间进行内部连接,条件是 DF2.C in DF1.B,这是我期望的结果:

DF1&DF2 :
| A B C D
---+--------------------------------------
0 | 'A' ['A', 'B'] 'A' 'X'
1 | 'A' ['A', 'B'] 'B' 'Y'
2 | 'B' ['B', 'D'] 'B' 'Y'

我读了documentation解释如何使用 concat 实现连接,但我找不到如何使用成员测试作为连接条件。

我错过了什么吗?知道怎么做吗?

最佳答案

这是 unnesting首先是问题,然后是 merge 问题

df3=unnesting(df1,['B'])
df3.merge(df2,left_on='B',right_on='C',how='inner').drop('B',1).merge(df1)
Out[15]:
A C D B
0 A A X [A, B]
1 A B Y [A, B]
2 B B Y [B, D]

Self-Define function

def unnesting(df, explode):
idx=df.index.repeat(df[explode[0]].str.len())
df1=pd.concat([pd.DataFrame({x:np.concatenate(df[x].values)} )for x in explode],axis=1)
df1.index=idx
return df1.join(df.drop(explode,1),how='left')

关于python - 在包含列表的单元格上合并两个 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53837685/

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