我有两个看起来像这样的数据框
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)可选:再次合并行
最佳答案
使用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