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

2024-06-25 05:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个像这样的数据帧

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

^{pr2}$

我尝试使用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)可选:再次合并行


Tags: 数据nameidfoocommentbarbazmerge
2条回答

查看这个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

使用^{}

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

相关问题 更多 >