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