我有两个尺寸相等的数据框。
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
仅接受单元格的值,而不接受索引和值。
我认为这应该是微不足道的操作,但是目前我还没有看到。我也找不到重复的问题。任何帮助,不胜感激。
答案 0 :(得分:4)
并不难,但我们需要.values的帮助
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
答案 1 :(得分:1)
这种操作可以解释为numpy的索引或熊猫的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