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
我有以下数据框。
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