Python 在多个值上合并两个数据帧
我有两个数据帧,看起来像这样 df1Python 在多个值上合并两个数据帧,python,pandas,Python,Pandas,我有两个数据帧,看起来像这样 df1 name ID abb 0 foo 251803 I 1 bar 376811 R 2 baz 174254 Q 3 foofoo 337144 IRQ 4 barbar 306521 IQ df2 abb comment 0 I
name ID abb
0 foo 251803 I
1 bar 376811 R
2 baz 174254 Q
3 foofoo 337144 IRQ
4 barbar 306521 IQ
df2
abb comment
0 I fine
1 R repeat
2 Q other
我试图使用pandasmerge
连接两个数据帧,并根据abb
列,以以下方式将第二个数据帧中的comment
列分配给第一个数据帧:
df1.merge(df2, how='inner', on='abb')
导致:
name ID abb comment
0 foo 251803 I fine
1 bar 376811 R repeat
2 baz 174254 Q other
这适用于abb
中唯一的单字母标识符。然而,它显然对不止一个字符无效
我试图在第一个数据帧中的abb
列上使用list
,但这会导致KeyError
我想做的是以下几点
1) 将此列中包含多个字符的行分隔为多行
2) 合并数据帧
3) 可选:再次合并行使用:
有关在柱上爆炸的各种方法,请参见此
rows = []
for i, row in df1.iterrows():
for a in row.abb:
rows.append([row['ID'], a, row['name']])
df11 = pd.DataFrame(rows, columns=df1.columns)
df11.merge(df2)
这些列如我上面所列。所以我不需要加入他们。但是,我不能使用“IRQ”上的split将字符串分为“I”、“R”和“Q”来使用stack获得三列。这是一个非常有洞察力的答案。非常感谢你。我已经计算了列表,但没有使用apply,这是这里的帽子戏法。看看你的原始答案,这可能比上面的解决方案@piRSquared稍微快一点
rows = []
for i, row in df1.iterrows():
for a in row.abb:
rows.append([row['ID'], a, row['name']])
df11 = pd.DataFrame(rows, columns=df1.columns)
df11.merge(df2)