将列值与行值匹配并写入新列
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
有多个问题:
Use column headers to find matching value and get value in matching column for the row
但它只适用于一个数据帧,所以我想合并数据帧,但似乎没有用。
使用DataFrame.join
with DataFrame.stack
:
df = (df1.join(df2.set_index('ID').stack().rename('Value'), on=['ID','Name'])
.fillna({'Value':0}))
或DataFrame.merge
with 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
我的第一个数据框是这样的:
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
有多个问题:
Use column headers to find matching value and get value in matching column for the row
但它只适用于一个数据帧,所以我想合并数据帧,但似乎没有用。
使用DataFrame.join
with DataFrame.stack
:
df = (df1.join(df2.set_index('ID').stack().rename('Value'), on=['ID','Name'])
.fillna({'Value':0}))
或DataFrame.merge
with 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