【问题标题】:pivot_table aggfunc by 1 index, when there are multiple indexes当有多个索引时,pivot_table aggfunc 按 1 个索引
【发布时间】:2022-09-30 17:49:45
【问题描述】:

我有一个如下所示的数据框(df1): df1

并希望将数据旋转为如下所示: df_desired

我一直在尝试以下(和 pandas groupby)的多次迭代并且被难住了: df_desired = pd.pivot_table(df1, values=\'cost\', index=[\'date\',\'name\'], aggfunc=np.sum)

由于有两个索引,它在 \'date\'、\'name\' 级别聚合。相反,我只想在“日期”级别聚合(总和)“成本”。

有没有办法告诉函数我想通过 \'date\' 对 \'cost\' 求和,而不从数据透视表中删除 \'name\'?

    标签: pandas dataframe


    【解决方案1】:

    我不完全确定,这是否是 Pandas 开箱即用的用例。你有类似“分组日期”之类的东西,通常会为 9 月 1 日、9 月 2 日等留下一行。对于成本,这是可行的,因为您将有一个单一的值,即总和,但对于名称,您希望再次扩展该组。

    我找到了一个感觉不对的解决方案:

    import pandas as pd
    df= pd.DataFrame([[1, 2, "John"], [1, 2, "Jeff"], [1, 2, "Larry"], [2, 5, "Susi"], [2, 5, "Sally"], [3, 4, "Joe"], [3, 4, "Bob"]], columns=["date", "cost", "name"])
    df.groupby(["date"], as_index=False).agg({"cost": sum, "name": lambda x: x}).explode(["name"]).set_index(["date", "cost", "name"])
    

    问题:它仅由索引列组成,实际上没有值,但也许你可以从那里继续。

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-04
      • 2019-10-03
      • 2017-11-19
      • 1970-01-01
      • 2013-04-22
      • 2021-10-30
      • 1970-01-01
      • 2014-05-01
      相关资源
      最近更新 更多