Python - 从不同列动态查找值

Python - Lookup value from different columns dynamically

我有以下数据框。

Name   |  Data
A         foo
A         bar
B         foo
B         bar
C         foo
C         bar
C         cat



Name   |  foo  |  bar  |  cat
A         1        2       3
B         4        5       6
C         7        8       9

我需要查找第二个数据框中的值并创建这样的数据框

Name   |  Data  |  Value
A         foo      1
A         bar      2
B         foo      4
B         bar      5
C         foo      7
C         bar      8
C         cat      9

我尝试遍历 df1 并像 df2[df2['Name']=='A']['foo'] 一样解析 df2,这可行,但需要很长时间才能完成。我是 python 的新手,如果能帮助我减少运行时间,我们将不胜感激。

您可以融化第二个数据框,然后将其与第一个数据框合并:

import pandas as pd

df1 = pd.DataFrame({
    'Name': ['A', 'A', 'B', 'B', 'C', 'C', 'C'],
    'Data': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'cat'],
})

df2 = pd.DataFrame({
    'Name': ['A', 'B', 'C'], 
    'foo': [1, 4, 7], 
    'bar': [2, 5, 8], 
    'cat': [3, 6, 9],
})

df1.merge(df2.melt('Name', var_name='Data'), on=['Name', 'Data'])

您可以使用 .melt + .merge:

x = df1.merge(df2.melt("Name", var_name="Data"), on=["Name", "Data"])
print(x)

打印:

  Name Data  value
0    A  foo      1
1    A  bar      2
2    B  foo      4
3    B  bar      5
4    C  foo      7
5    C  bar      8
6    C  cat      9