合并多个值上的两个数据帧

时间:2016-07-21 08:05:56

标签: 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       fine
     1      R     repeat
     2      Q      other

我正在尝试使用pandas merge加入这两个数据框,并根据以下comment列将第二个数据框中的abb列分配给第一个数据框方式:

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中唯一的单字母标识符。但是,它显然不会超过一个字符。

我尝试在第一个数据框中的list列上使用abb,但这会产生KeyError

我想做的是以下内容。

1)将包含此列中多个字符的行分隔成多行

2)合并数据框

3)可选:再次组合行

2 个答案:

答案 0 :(得分:2)

使用join

print (df1)
     name      ID  abb
0     foo  251803    I
1     bar  376811    R
2     baz  174254    Q
3  foofoo  337144  IRQ
4  barbar  306521   IQ

#each character to df, which is stacked to Series
s = df1.abb.apply(lambda x: pd.Series(list(x)))
           .stack()
           .reset_index(drop=True, level=1)
           .rename('abb')
print (s)
0    I
1    R
2    Q
3    I
3    R
3    Q
4    I
4    Q
Name: abb, dtype: object

df1 = df1.drop('abb', axis=1).join(s)
print (df1)
     name      ID abb
0     foo  251803   I
1     bar  376811   R
2     baz  174254   Q
3  foofoo  337144   I
3  foofoo  337144   R
3  foofoo  337144   Q
4  barbar  306521   I
4  barbar  306521   Q

答案 1 :(得分:1)

有关在列上爆炸的各种方法,请参阅此answer

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)

enter image description here