【问题标题】:Python - Lookup value from different columns dynamicallyPython - 动态查找来自不同列的值
【发布时间】:2026-01-11 18:50:01
【问题描述】:

我有以下数据框。

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 新手,如有任何减少运行时间的帮助,我们将不胜感激。

【问题讨论】:

  • 编辑问题并添加您的代码 sn-p。这将有助于回答的人。

标签: python dataframe data-structures


【解决方案1】:

你可以使用.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

【讨论】:

    【解决方案2】:

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

    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'])
    

    【讨论】: