【问题标题】:Is there a way to aggregate multiple Pandas rows into a single row with extra columns?有没有办法将多个 Pandas 行聚合成带有额外列的单行?
【发布时间】:2021-08-17 23:36:45
【问题描述】:

我正在寻找一种基于列值聚合 Pandas DataFrame 的有效方法,其中列根据另一列中的值进行扩展和命名。最好用一个例子来解释:

这是我的输入数据框:

  customer device   x   y   z
0     Jack      M   1   2   3
1     Jack      D   4   5   6
2     Jane      M   7   8   9
3     Jane      D  10  11  12

这是我想要的输出:

  customer  x_M  y_M  z_M  x_D  y_D  z_D
0     Jack    1    2    3    4    5    6
1     Jane    7    8    9   10   11   12

如您所见,“聚合”可能是一个误导性的词。相反,这些行被“扩展”为基于它们各自行中的另一列命名的列。

在我看来,我将不得不做一些循环 - 但我希望 Pandas 操作比做同样的事情更有效。谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    只需pivot 数据框,然后通过_ 在两个级别连接列:

    >>> out=df.pivot('customer', 'device', ['x', 'y', 'z'])
    >>> out.columns=['_'.join(c) for c in out]
    

    输出:

              x_D  x_M  y_D  y_M  z_D  z_M
    customer                              
    Jack        4    1    5    2    6    3
    Jane       10    7   11    8   12    9
    

    【讨论】:

    • 取消我之前的评论 - 这非常有效。谢谢
    • 根据您的代码,我们还可以重置索引以获得所要求的确切格式:out.reset_index(inplace=True)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2017-01-24
    • 2016-05-10
    • 2013-12-14
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多