我有两个维度相等的数据框。
df1
包含列的索引。
left right opp
0 2 0 1
1 2 1 0
2 1 2 0
df2
包含感兴趣的值。
value1 value2 value3
0 10 25 60
1 30 40 100
2 80 45 30
我想创建一个数据框,它将列索引从 df1
的值,并使用它们从 df2
:
left right opp
0 60 10 25
1 100 40 30
2 45 30 80
我希望能解决这个问题 applymap
和 iloc
. 类似这样。
df3 = df1.applymap(lambda x, y: df2.iloc[x,y])
不过 applymap
只取单元格的值,不取索引和值。
我感觉这应该是一个很琐碎的操作,但我目前没有看到。我也找不到重复的问题。非常感谢任何帮助。
这并不难,但我们需要从.value中获得帮助。
df=df1.apply(lambda x :df2.values[x.index,x])
left right opp
0 60 10 25
1 100 40 30
2 45 30 80
这种操作可以理解为numpy的索引或pandas的操作。lookup
:
# numpy indexing
rows = np.repeat(df1.index.values,df1.shape[1]).reshape(df1.shape)
pd.DataFrame(df2.values[rows, df1], index=df1.index, columns=df1.columns)
产出:
left right opp
0 60 10 25
1 100 40 30
2 45 30 80