使用pandas合并,求和并删除重复项

时间:2016-09-02 13:44:55

标签: python pandas

我有两个不同大小的数据框,如下所示:

df_web = (['Event Category', 'ID', 'Total Events', 
           'Unique Events', 'Event Value', 'Avg. Value'])

df_app = (['Event Category', 'ID', 'Total Events',
           'Unique Events', 'Event Value', 'Avg. Value']

我正在使用pandas尝试将它们合并到一个' df_final'中,但我想总结一下' Total Events'具有相同的ID' ,最后我想要一个' df_final' ID中没有重复。

我试过了:

df_final_analysis = df_web.groupby(['Event Category', 'ID', 'Total Events', 
                                   'Unique Events', 'Event Value', 'Avg. Value'],
                                    as_index=False)['Total Events'].sum()

但它并没有给我我想要的结果。

例如:

df_web

  Video          A        10

  Video          B         5

  Video          C         1

  Video          F         1

  Video          G         1

  Video          H         1

对于df_app:

  Video         A       15


  Video         D        3


  Video         C        1

对于我想要的df_final_analysis:

  Video         A       25

  Video         B        5

  Video         D        3

  Video         C        2

  Video         F        1

  Video         G        1

  Video         H        1

有优雅的方法吗?

1 个答案:

答案 0 :(得分:0)

使用pd.concat修改了代码中的解决方案:

In [46]: df
Out[46]: 
           0  1   2
    0  Video  A  10
    1  Video  B   5
    2  Video  C   1
    3  Video  F   1
    4  Video  G   1
    5  Video  H   1

In [47]: df1
Out[47]: 
           0  1   2
    0  Video  A  15
    1  Video  D   3
    2  Video  C   1

In[59]:pd.concat([df,df1]).groupby([0,1],as_index=False)[2].sum()
Out[59]: 
       0  1   2
0  Video  A  25
1  Video  B   5
2  Video  C   2
3  Video  D   3
4  Video  F   1
5  Video  G   1
6  Video  H   1

使用pd.merge

In [60]: pd.merge(df,df1,how='outer').groupby([0,1],as_index=False)[2].sum()
Out[60]: 
       0  1     2
0  Video  A  25.0
1  Video  B   5.0
2  Video  C   1.0
3  Video  D   3.0
4  Video  F   1.0
5  Video  G   1.0
6  Video  H   1.0