使用pandas Dataframe Python对运行摘要进行分组

时间:2018-06-28 13:30:18

标签: python spyder

我有一个充满数据的文件

遇到一个我想在查询中总结结果的问题。

示例如下:

NAME | FRUIT | PRICE 
JOHN | APPLE |  2
JOHN | APPLE |  2
JOHN | APPLE |  2
JOHN | APPLE |  2
JOHN | GRAPE |  3
DAVE | GRAPE |  3
DAVE | GRAPE |  3
DAVE | GRAPE |  3

这是我现在的桌子,尽管我需要的是约翰斯业务的摘要,如下所示:

NAME | FRUIT      | PRICE 
JOHN | APPLE      |  2
JOHN | APPLE      |  2
JOHN | APPLE      |  2
JOHN | APPLE      |  2
JOHN | APPLETOTAL |  8 
JOHN | GRAPE      |  3
JOHN | GRAPETOTAL |  3
DAVE | GRAPE      |  3
DAVE | GRAPE      |  3
DAVE | GRAPE      |  3

可以做到吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

  1. 创建摘要数据框

    summary_df = df.groupby(["NAME","FRUIT"] )["PRICE"].sum()

  2. 然后像这样突变FRUIT列

    summary_df.FRUIT = summary_df.FRUIT.apply(lambda x : x + "TOTAL")

  3. 最后将数据帧添加回基本df

    df = pd.concat([df, summary_df])

您可以按FRUIT列对该数据框df进行排序,以获得排序后的数据框

答案 1 :(得分:1)

这应该可以解决您的问题

totals = df.groupby(['FRUIT', 'NAME']).sum().reset_index()
totals['FRUIT'] = totals['FRUIT'] + 'TOTAL'

result = pd.concat([df, totals]).sort_values(['NAME', 'FRUIT']).reset_index(drop=True)
result
#    NAME       FRUIT  PRICE
#0   DAVE       GRAPE      3
#1   DAVE       GRAPE      3
#2   DAVE       GRAPE      3
#3   DAVE  GRAPETOTAL      9
#4   JOHN       APPLE      2
#5   JOHN       APPLE      2
#6   JOHN       APPLE      2
#7   JOHN       APPLE      2
#8   JOHN  APPLETOTAL      8
#9   JOHN       GRAPE      3
#10  JOHN  GRAPETOTAL      3