熊猫,多索引

Posted

技术标签:

【中文标题】熊猫,多索引【英文标题】:Pandas, mulitindexing 【发布时间】:2016-10-16 12:17:05 【问题描述】:

我有需要为每列聚合的数据,然后再次为每列聚合。我需要的是每个独特客户的每个产品类别的总支出。多索引应该这样做。问题是我是 Pandas 的新手,我不懂多索引。

我的数据结构如下:

 Customer  Products  Amount
1  001       Toys      5
2  002       Toys      6
3  002       Cars      7
4  001       Toys      2
5  001       Cars      9

我需要这样的:

Customers Products      Sum of ammount
001       Toys          7
          Cars          9
002       Toys          6
          Cars          7

稍后我需要对其进行转换,以便获得每个产品类别、每个客户的总支出。

Customer Toys Cars
001      7    9
002      6    7

我一直在玩代码,但我被卡住了。一直在阅读,但没有找到我正在寻找的东西。

【问题讨论】:

【参考方案1】:

我认为您可以将groupbysum 一起使用:

df1 = df.groupby(['Customer','Products'])['Amount'].sum().reset_index(name='Sum of ammount')
print (df1)
  Customer Products  Sum of ammount
0      001     Cars               9
1      001     Toys               7
2      002     Cars               7
3      002     Toys               6

那么你可以使用pivot from df1:

print (df1.pivot(index='Customer',columns='Products',values='Sum of ammount'))
Products  Cars  Toys
Customer            
001          9     7
002          7     6

如果需要pivot_table from df:

print (df.pivot_table(index='Customer',columns='Products',values='Amount', aggfunc=sum))
Products  Cars  Toys
Customer            
001          9     7
002          7     6

编辑:

为了更好的df,你可以reset_indexrename_axispandas0.18.0 中的新功能):

print (df.pivot_table(index='Customer',columns='Products',values='Amount', aggfunc=sum)
         .reset_index()
         .rename_axis(None, axis=1))

  Customer  Cars  Toys
0      001     9     7
1      002     7     6

print (df1.pivot(index='Customer',columns='Products',values='Sum of ammount')
          .reset_index()
          .rename_axis(None, axis=1))

  Customer  Cars  Toys
0      001     9     7
1      002     7     6

【讨论】:

谢谢耶兹瑞尔。我最终将在 3000 万行上执行此操作,我担心带有枢轴的 RAM。我有 32 GB 可用空间。旋转的效率如何? Phhhooo,很难的问题,但pivot 是非常困难且消耗内存的操作。不过你可以试试。 我很好奇它如何与您的大号DataFrame 配合使用。 您提供的输入在一个小样本上效果很好。我添加了一个填充(0)。我现在将尝试在完整数据集上运行脚本。会让你知道。谢谢 Jazreal。 顺便说一句,也许你忘了accept我的老solution。你也可以accept这个解决方案。谢谢。

以上是关于熊猫,多索引的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框多索引合并

熊猫切片多索引数据框

插值多索引熊猫数据框

来自按级别分组的多索引熊猫数据框的子图

在熊猫中交换/排序多索引列

熊猫数据框检查索引是不是存在于多索引中