从两个数据框创建新的数据框。一个df包含列索引,另一个df包含值

时间:2020-05-21 03:24:07

标签: python pandas dataframe apply

我有两个尺寸相等的数据框。

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

我希望用applymapiloc解决这个问题。像这样:

df3  = df1.applymap(lambda x, y: df2.iloc[x,y]) 

但是,applymap仅接受单元格的值,而不接受索引和值。

我认为这应该是微不足道的操作,但是目前我还没有看到。我也找不到重复的问题。任何帮助,不胜感激。

2 个答案:

答案 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