python - 如何应用 groupby 并根据年龄获取 N 列 - Pandas

标签 python pandas

我在下面有数据框,我试图在其中以相同的顺序获取所有产品 一行。

我使用下面的代码和数据框。

df3 = df1.groupby(df1.index)['PartNo'].agg([('product','first'), ('productNew','last')])
        Product 
88      prod1
88      prod2
88      prod3
89      prod3
89      prod4

但是,我最多可以获得 2 个基于“第一个”和“最后一个”聚合的产品。

我的输出是。

        product  productNew     
88      prod1  prod2
89      prod3  prod4

如何更改代码以使每个订单的 N 个产品在同一行中,如下例所示?

        0       1       2.....N 
88      prod1  prod2 prod3
89      prod3  prod4 NaN

最佳答案

这是带有索引的pivot:

(df.assign(col=df.groupby(level=0).PartNo.cumcount())
  .pivot(columns='col', values='PartNo'))

输出:

col      0      1      2
88   prod1  prod2  prod3
89   prod3  prod4    NaN

关于python - 如何应用 groupby 并根据年龄获取 N 列 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58662244/

相关文章:

python - 为什么我在正则表达式模式中需要一个额外的空间才能使其正常工作?

python-3.x - 将不均匀字典列表转换为 pandas 数据框

python 到 mysql (MariaDB) 插入带有变量错误的查询

python - 我们如何从配置文件(具有列名)的分隔符的基础上拆分列名

python - 为什么我的递归二分搜索函数没有返回任何内容?

python - 您不认为从系列列表创建 DataFrame 很奇怪吗?

python - pandas 将索引值转换为小写

python - Jupyter 客户端通过 Python 连接到正在运行的内核

Python Web Scraper : My script is just printing the first one, 而不是全部?

python - 如何使用 Pandas Series 绘制两个不同长度/开始日期的时间序列?