pandas合并两个数据帧并汇总单元格值

时间:2017-03-22 16:12:02

标签: python pandas dataframe

我正在尝试通过列合并2个DataFrame,并总结 fullprice actualprice 折扣< / strong>行。

以下是示例:

# First DataFrame
  month  fullprice  actualprice  discount
0   Jan         10            7         3
1   Feb          6            4         2


# Second DataFrame
  month  fullprice  actualprice  discount
0   Jan         11            5         6
1   Feb          6            4         2
2   Mar        100           50        50


# Desired result
  month  fullprice  actualprice  discount
0   Jan         21            12        9
1   Feb         12             8        4
2   Mar        100            50        50

尝试了一些方法,但这不是我需要的方法:

df1 = pd.DataFrame([['Jan', 10, 7, 3], ['Feb', 6, 4, 2]], columns=['month', 'fullprice', 'actualprice', 'discount'])
df2 = pd.DataFrame([['Jan', 11, 5, 6], ['Feb', 6, 4, 2], ['Mar', 100, 50, 50]], columns=['month', 'fullprice', 'actualprice', 'discount'])

df2.add(df1)

       month  fullprice  actualprice  discount
    0  JanJan       21.0         12.0       9.0
    1  FebFeb       12.0          8.0       4.0
    2     NaN        NaN          NaN       NaN

df1.merge(df2, how='right')

        month  fullprice  actualprice  discount
    0   Feb          6            4         2
    1   Jan         11            5         6
    2   Mar        100           50        50

df1.merge(df2, on='month', how='right')

        month  fullprice_x  actualprice_x  discount_x  fullprice_y actualprice_y  \
    0   Jan         10.0            7.0         3.0           11              5   
    1   Feb          6.0            4.0         2.0            6              4   
    2   Mar          NaN            NaN         NaN          100             50   

        discount_y  
    0           6  
    1           2  
    2          50

任何想法如何合并?

1 个答案:

答案 0 :(得分:3)

使用append然后groupby。

df1 = df1.set_index('month')
df2 = df2.set_index('month')
df1.append(df2).groupby(level=0).sum()

       fullprice  actualprice  discount
month                                  
Feb           12            8         4
Jan           21           12         9
Mar          100           50        50

或如果没有索引:

df1.append(df2).groupby('month').sum()