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

问题描述 投票:0回答:2

我有两个维度相等的数据框。

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 只取单元格的值,不取索引和值。

我感觉这应该是一个很琐碎的操作,但我目前没有看到。我也找不到重复的问题。非常感谢任何帮助。

python pandas dataframe apply
2个回答
4
投票

这并不难,但我们需要从.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

1
投票

这种操作可以理解为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
© www.soinside.com 2019 - 2024. All rights reserved.