我有两个DataFrame,我想从数据帧A中获取一个列的中值,再将其与另外两个列组成一组,然后将计算出的中值合并到数据帧B中。让我使用以下示例进行解释:>
我有两个DataFrame
,看起来像
# DataFrame 1
pu_c do_c fare
0 0 5 10
1 0 5 20
2 1 1 3
# DataFrame 2
pu_c do_c
0 0 3
1 0 5
2 1 1
我想使用fare
和pu_c
分组的do_c
的中位数,使用:
a = df1.groupby(['pu_c', 'do_c']).median()['fare']
这将导致:
pu_c do_c
0 5 15
1 1 3
现在,我想将a
中的df1
中计算出的中位数票价合并到另一个数据帧中,例如df2
。我知道如何使用for循环和凌乱的代码。我想知道是否有使用熊猫的merge
或concat
函数的有效方法。
在此示例中,我想要的输出是
pu_c do_c median_fare
0 0 3 NaN (or whatever)
1 0 5 15
2 1 1 3
注意:要重现我的数据帧,请使用:
import pandas as pd
pu_c = [0, 0, 1]
do_c = [5, 5, 1]
do_c2 = [3, 5, 1]
fare = [10, 20, 3]
df1 = pd.DataFrame({'pu_c': pu_c, 'do_c': do_c, 'fare': fare})
df2 = pd.DataFrame({'pu_c': pu_c, 'do_c': do_c2})
答案 0 :(得分:2)
将a
转换为数据框,然后使用median_fare
将值重命名为a.to_frame('median_fare')
,重置索引,然后与df2
进行外部合并。它将自动合并到两个共同的列(do_c
和pu_c
)
df2.merge(a.to_frame('median_fare').reset_index(), how='outer')
do_c pu_c median_fare
0 3 0 NaN
1 5 0 15.0
2 1 1 3.0