使用另一个数据帧行中的多个值在 pandas 数据帧中查找值
lookup value in the pandas dataframe using the muliple values in the row of another dataframe
我有数据框:
df1:
| |A|B|C|D|E|
|0|1|2|3|4|5|
|1|1|3|4|5|0|
|2|3|1|2|3|5|
|3|2|3|1|2|6|
|4|2|5|1|2|3|
df2:
| |K|L|M|N|
|0|1|3|4|2|
|1|1|2|5|3|
|2|3|2|3|1|
|3|1|4|5|0|
|4|2|2|3|6|
|5|2|1|2|7|
我需要做的是匹配df1的A列和df2的k列; df1 的 C 列和 df2 的 L 列; df1 的 D 列和 df2 的 M 列。如果值匹配,则应将 df2 中 N 的相应值分配给 df1 中的新列 F。输出应该是:
| |A|B|C|D|E|F|
|0|1|2|3|4|5|2|
|1|1|3|4|5|0|0|
|2|3|1|2|3|5|1|
|3|2|3|1|2|6|7|
|4|2|5|1|2|3|7|
将 DataFrame.merge
与左连接一起使用并重命名匹配列:
df = df1.merge(df2.rename(columns={'K':'A','L':'C','M':'D', 'N':'F'}), how='left')
print (df)
A B C D E F
0 1 2 3 4 5 2
1 1 3 4 5 0 0
2 3 1 2 3 5 1
3 2 3 1 2 6 7
4 2 5 1 2 3 7
df3 = df1.join(df2)
F = []
for _, row in df3.iterrows():
if row['A'] == row['K'] and row['C'] == row['L'] and row['D'] == row['M']:
F.append(row['N'])
else:
F.append(0)
df1['F'] = F
df1
我有数据框:
df1: | |A|B|C|D|E| |0|1|2|3|4|5| |1|1|3|4|5|0| |2|3|1|2|3|5| |3|2|3|1|2|6| |4|2|5|1|2|3| df2: | |K|L|M|N| |0|1|3|4|2| |1|1|2|5|3| |2|3|2|3|1| |3|1|4|5|0| |4|2|2|3|6| |5|2|1|2|7|
我需要做的是匹配df1的A列和df2的k列; df1 的 C 列和 df2 的 L 列; df1 的 D 列和 df2 的 M 列。如果值匹配,则应将 df2 中 N 的相应值分配给 df1 中的新列 F。输出应该是:
| |A|B|C|D|E|F| |0|1|2|3|4|5|2| |1|1|3|4|5|0|0| |2|3|1|2|3|5|1| |3|2|3|1|2|6|7| |4|2|5|1|2|3|7|
将 DataFrame.merge
与左连接一起使用并重命名匹配列:
df = df1.merge(df2.rename(columns={'K':'A','L':'C','M':'D', 'N':'F'}), how='left')
print (df)
A B C D E F
0 1 2 3 4 5 2
1 1 3 4 5 0 0
2 3 1 2 3 5 1
3 2 3 1 2 6 7
4 2 5 1 2 3 7
df3 = df1.join(df2)
F = []
for _, row in df3.iterrows():
if row['A'] == row['K'] and row['C'] == row['L'] and row['D'] == row['M']:
F.append(row['N'])
else:
F.append(0)
df1['F'] = F
df1