【问题标题】:I want to sum the rows of a column in multiindex-dataframe but keep the values of other columns我想对 multiindex-dataframe 中一列的行求和,但保留其他列的值
【发布时间】:2019-08-27 10:57:53
【问题描述】:

我有以下形式的数据框:

                                   Price  Quantity
Date       Mat        Str    Type                 
2016-01-05 2016-02-19 3125.0 C        44     0.069
                             C        44     0.032
                             C        44     0.015
2016-01-06 2016-02-15 3169.0 P        69     0.069

我希望对 Quantity 列的行求和,但保持价格列不变(例如,用平均值制作另一个价格列)

我想过让 Price 列成为索引的一部分,但我的目标是比较 PriceQuantity Df 与其他类似形状的 Df 我可能会遇到一些问题。

这里有一些重新创建 df 的代码:


import pandas as pd



data = [{'Date':'2016-01-05', 'Mat':'2016-02-19', 'Str': 3125.0, 'Type': 'C', 'Quantity':0.069, 'Price':44},
        {'Date':'2016-01-05', 'Mat':'2016-02-19', 'Str': 3125.0, 'Type': 'C', 'Quantity':0.032, 'Price':44},
        {'Date':'2016-01-05', 'Mat':'2016-02-19', 'Str': 3125.0, 'Type': 'C', 'Quantity':0.015, 'Price':44},
        {'Date':'2016-01-06', 'Mat':'2016-02-15', 'Str': 3169.0, 'Type': 'P', 'Quantity':0.069, 'Price':69}]


df1 = pd.DataFrame(data)
df1 = df1.set_index(['Date', 'Mat', 'Str', 'Type'])

感谢您的帮助!

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    我相信您需要按某些级别进行分组 - 例如首先由level=0GroupBy.transform 按聚合值填充新列:

    df1['Sum'] = df1.groupby(level=0)['Quantity'].transform('sum')
    print (df1)
                                       Quantity  Price    Sum
    Date       Mat        Str    Type                        
    2016-01-05 2016-02-19 3125.0 C        0.069     44  0.116
                                 C        0.032     44  0.116
                                 C        0.015     44  0.116
    2016-01-06 2016-02-15 3169.0 P        0.069     69  0.069
    

    【讨论】:

    • @meowcatz42 - 超级好,所以预期的输出是我的答案中的新列?
    • 是的,它比我最初想要的要好,因为简单地将同一列中的行相加会使我丢失一些我需要的信息以供将来比较。
    【解决方案2】:

    试试这个

    df1.groupby(['Date','Str','Mat','Type']).agg( Q_sum=('Quantity', 'sum'), Price=('Price','mean')).reset_index()
    

    结果如下

    Date    Str     Mat     Type    Q_sum   Price
    2016-01-05  3125.0  2016-02-19  C   0.116   44
    2016-01-06  3169.0  2016-02-15  P   0.069   69
    

    【讨论】:

    • 它说 agg() 缺少一个必需的位置参数
    • 它非常适合我。请照原样复制。
    • 谢谢,伙计!我想给你投票,但我暂时不能。
    • @mohanys - 您可以为问题投票 15 分,以便 OP 可以投票。 ;)
    • @mohanys - 我有更多的问题,原因是我记得如果从 SO 开始获得一些分数是多么困难;)所以如果问题不是特别有问题,我总是赞成...... ;)
    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2021-10-26
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多