让以下dfs:
import numpy as np
import pandas as pd
df1 = pd.DataFrame({
"k1": [1, 1, 2, 2, 3, 3, 4, 4, 4],
})
df2 = pd.DataFrame({
"k2": [1, 1, 2, 2, 3, 4, 4],
"v2": np.random.rand(7)
})
print(df1)
print("_______")
print(df2)
print("_______")
输出:
k1
0 1
1 1
2 2
3 2
4 3
5 3
6 4
7 4
8 4
_______
k2 v2
0 1 0.260026
1 1 0.474951
2 2 0.695962
3 2 0.158575
4 3 0.396015
5 4 0.740344
6 4 0.293410
_______
我想为创建一个新列 df1
每把钥匙 k1
,将应用相应的值,以便 k1
== k2
,该值将是 v2
组中的 df2
谁的钥匙是 k2
.
上述情况所需的输出:
k1 result
0 1 0.474951
1 1 0.474951
2 2 0.695962
3 2 0.695962
4 3 0.396015
5 3 0.396015
6 4 0.740344
7 4 0.740344
8 4 0.740344
可以假设 k1
也在 k2
.
这可能是通过两个groupby操作完成的,一个用于查询,一个用于赋值,但我不知道如何将一个操作的输出与另一个操作的输入联系起来。
2条答案
按热度按时间rqmkfv5c1#
我们可以试试
map
以及groupby
```df1['result'] = df1['k1'].map(df2.groupby('k2')['v2'].max())
k1 result
0 1 0.474951
1 1 0.474951
2 2 0.695962
3 2 0.695962
4 3 0.396015
5 3 0.396015
6 4 0.740344
7 4 0.740344
8 4 0.740344
sh7euo9m2#
首先,你可以分类
k2
以及v2
中的列df2
以确保列中的值较大v2
先别动。然后把复制品放在k2
为了保持第一个,也就是最后的最大值,map
v2
中的列k2
至df1
.