Python 在包含列表的单元格上合并两个数据帧
我有两个数据帧,其中一个包含一列,列的单元格中有列表。以下是一个例子:Python 在包含列表的单元格上合并两个数据帧,python,pandas,Python,Pandas,我有两个数据帧,其中一个包含一列,列的单元格中有列表。以下是一个例子: 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'
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'
以下是设置数据帧的代码:
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.B中的条件DF2.C在DF1和DF2之间进行内部联接,下面是我预期的结果:
DF1&DF2 :
| A B C D
---+--------------------------------------
0 | 'A' ['A', 'B'] 'A' 'X'
1 | 'A' ['A', 'B'] 'B' 'Y'
2 | 'B' ['B', 'D'] 'B' 'Y'
我阅读了解释如何使用concat实现连接的文章,但是我找不到如何使用成员资格测试作为连接条件
我错过什么了吗?你知道怎么做吗?这首先是个问题,然后是合并问题
pd.concat[df1,df2],axis=1怎么样?@pygo我试过了,但结果不是我期望的。我不想对齐df1和df2。
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]
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')