将列值与行值匹配并写入新列
python 178
原文标题 :Matching the column values to the row values and write in the new column
我的第一个数据框如下所示:
df1:
ID Name Result
ABC1 John A
ABC1 Mac B
ABC1 Kat C
DEF1 John D
DEF1 Mac E
DEF1 Kat F
XYZ1 John G
XYZ1 Mac H
XYZ1 Kat I
df2:
ID John Mac Kat
ABC1 22 33 11
DEF1 10 12 2
XYZ2 11 12 36
结果 df3:(它应该将 df1 的 ID 和名称与 df2 的列的 ID 和名称(John、Mac 和 Kat)匹配,然后给出它们各自的值。
ID Name Result Value
ABC1 John A 22
ABC1 Mac B 33
ABC1 Kat C 11
DEF1 John D 10
DEF1 Mac E 12
DEF1 Kat F 2
XYZ1 John G 0
XYZ1 Mac H 0
XYZ1 Kat I 0
有多个问题:
使用列标题查找匹配值并在该行的匹配列中获取值
将行值替换为将行值与列名匹配
但它只适用于一个数据框,所以我想合并数据框,但似乎不起作用。
回复
我来回复-
jezrael 评论
用
DataFrame.join
和DataFrame.stack
:df = (df1.join(df2.set_index('ID').stack().rename('Value'), on=['ID','Name']) .fillna({'Value':0}))
或
DataFrame.merge
和DataFrame.melt
:df = (df1.merge(df2.melt('ID', var_name='Name', value_name='Value'), on=['ID','Name'], how='left') .fillna({'Value':0}))
print (df) ID Name Result Value 0 ABC1 John A 22.0 1 ABC1 Mac B 33.0 2 ABC1 Kat C 11.0 3 DEF1 John D 10.0 4 DEF1 Mac E 12.0 5 DEF1 Kat F 2.0 6 XYZ1 John G 0.0 7 XYZ1 Mac H 0.0 8 XYZ1 Kat I 0.0
2年前