以下是我的数据框:
DF1:
pri sec0 sec1 sec2
ACL EMR DFG XHD
ABC MKB JKL KLF
XYZ LMN SDF GHY
DF2:
name loc
ACL 12
EMR 23
DFG 431
XHD 48
ABC 55
MKB 699
JKL 70
KLF 82
XYZ 93
LMN 10
SDF 235
GHY 53
我正在尝试将名称列为df2的df1的每个pri,sec0,sec1 ...列连接起来,并希望将loc列附加到pri,sec0,sec1 ......的每个匹配元素中(分别为pri_loc,sec0_loc ...)
以下是必需的输出:
pri pri_loc sec0 sec0_loc sec1 sec1_loc sec2 sec2_loc
ACL 12 EMR 23 DFG 431 XHD 48
ABC 55 MKB 699 JKL 70 KLF 82
XYZ 93 LMN 10 SDF 235 GHY 53
我可以获得有关如何实现这一目标的建议吗?
答案 0 :(得分:1)
您可以join
replace
创建由set_index
创建的DataFrame
所有值add_suffix
新成员Series
,然后为更改列名称添加sort_index
最后set_index
用于排序列:
df=df1.join(df1.replace(df2.set_index('name')['loc']).add_suffix('_loc')).sort_index(axis=1)
print (df)
pri pri_loc sec0 sec0_loc sec1 sec1_loc sec2 sec2_loc
0 ACL 12 EMR 23 DFG 431 XHD 48
1 ABC 55 MKB 699 JKL 70 KLF 82
2 XYZ 93 LMN 10 SDF 235 GHY 53
详情:
print (df1.replace(df2.set_index('name')['loc']).add_suffix('_loc'))
pri_loc sec0_loc sec1_loc sec2_loc
0 12 23 431 48
1 55 699 70 82
2 93 10 235 53
编辑:
如果我在
ternary
中再添加一列df1
并且我不希望以df2的名称加入它,但我想在输出中使用
然后使用reset_index
第一个和最后一个this:
df1 = df1.set_index('ternary')
df = (df1.join(df1.replace(df2.set_index('name')['loc']).add_suffix('_loc'))
.sort_index(axis=1)
.reset_index())
print (df)