【问题标题】:How do I pivot a pandas DataFrame while concatenating string values?如何在连接字符串值时旋转 pandas DataFrame?
【发布时间】:2021-09-24 08:02:06
【问题描述】:

这里有很多来自 VBA 的坏习惯的 Python 新手。我已经设计了一种漫长而复杂的方法来实现我所需要的,但我确信有一种更好的 Pythonic 方法可以做到这一点,并且非常感谢一些指针。 基本上,我有一个像这样的表(只是更大,>5000 行,我已经从 csv 文件导入到 pandas DataFrame):

我想最终得到一个连接销售员姓名并汇总销售数据的旋转 DataFrame,如下所示:

(由于我不需要进入的原因,我更喜欢那些以列表形式连接的名称,因此是括号。)

在我的一生中,我无法在 pandas 中找到一种简单的方法来做到这一点。 (我什至应该使用 pandas 吗?)我会省去你想出的荒谬代码(除非有人真的想看它,笑一笑),但基本上我最终创建了各种列表并遍历它们(就像我会在 VBA 数组中)把我想要的东西放在一起......不要问。

我可以轻松地做这样的事情

df_pivot = pd.pivot_table(df,index=['City'],values=['Sales'],aggfunc=np.sum)

获取第 1 列和第 3 列,但不知道如何以 Python 方式获取第 2 列。这样做的明智方法是什么? 谢谢!

【问题讨论】:

    标签: python pandas dataframe pivot-table


    【解决方案1】:

    GroupBy.agg 与命名聚合一起使用:

    df.groupby('City').agg(Names = ('Salesman', list), Sum_Sales=('Sales', 'sum'))
    

    或者:

    df.groupby('City').agg(**{'Names': ('Salesman', list), 'Sum of Sales':('Sales', 'sum')})
    

    【讨论】:

    • @Erfan - 谢谢。
    【解决方案2】:

    groupbyagg 一起使用:

    df.groupby('City').agg({'Salesman': list, 'Sales': sum})
    

    或者用列名:

    df.groupby('City').agg({'Salesman': list, 'Sales': sum})
                      .rename({'Salesman': 'Names', 'Sales': 'Sum of Sales'}, axis=1)
    

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 2022-01-03
      • 2020-09-07
      • 2020-05-22
      • 2018-06-02
      相关资源
      最近更新 更多