Python 在多个值上合并两个数据帧

Python 在多个值上合并两个数据帧,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

我有两个数据帧,看起来像这样

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       fine
     1      R     repeat
     2      Q      other
我试图使用pandas
merge
连接两个数据帧,并根据
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)