[英]Pandas Pivot table, how to put a series of columns in the values attribute
首先,我很抱歉! 这是我第一次使用堆栈溢出,所以我希望我做得对! 我搜索了但找不到我想要的东西。 我对pandas和python也很陌生:)我将尝试使用一个示例,我将尝试弄清楚。
我有一个包含30列的数据框,其中包含有关购物车的信息,其中1列(订单)具有2个值,或者两个值都在进行中。 我有20列内容,例如苹果,橙子,香蕉……而且我需要知道一个苹果完整的顺序是多少次,而进行中的顺序是多少次。 我决定使用具有汇总函数计数的数据透视表。 这将是数据框的一个小示例:
Order | apple | orange | banana | pear | pineapple | ... |
-----------|-------|--------|--------|------|-----------|------|
completed | 2 | 4 | 10 | 5 | 1 | |
completed | 5 | 4 | 5 | 8 | 3 | |
iProgress | 3 | 7 | 6 | 5 | 2 | |
completed | 6 | 3 | 1 | 7 | 1 | |
iProgress | 10 | 2 | 2 | 2 | 2 | |
completed | 2 | 1 | 4 | 8 | 1 | |
我有我想要的输出,但是我正在寻找的是一种选择很多列而不必手动键入的更优雅的方法。
df.pivot_table(index=['Order'], values=['apple', 'bananas', 'orange', 'pear', 'strawberry',
'mango'], aggfunc='count')
但是我想选择大约15列,因此,我确定没有一种简单的方法可以通过使用列号或其他方式来一次输入15次。 假设我要从6到15中选择列。
我尝试过使用values = [df.columns [6:15]]之类的东西,也尝试过使用df.iloc,但是正如我所说的,我很新,所以我可能使用了错误的东西或制作了愚蠢的东西。 !
有没有办法让他们有秩序? 因为在我的回答中,它们似乎是按字母顺序排列的,所以我想保持列的顺序。 所以应该是苹果,橙子,香蕉...
Order Completed In progress
apple 92 221
banana 102 144
mango 70 55
我只是在寻找一种改进我的代码的方法,希望我不会造成太多混乱。 谢谢!
我认为您可以使用:
#if need select only few columns - df.columns[1:3]
df = df.pivot_table(columns=['Order'], values=df.columns[1:3], aggfunc='count')
print (df)
Order completed iProgress
apple 4 2
orange 4 2
#if need use all column, parameter values can be omit
df = df.pivot_table(columns=['Order'], aggfunc='count')
print (df)
Order completed iProgress
apple 4 2
banana 4 2
orange 4 2
pear 4 2
pineapple 4 2
df = df.pivot_table(columns=['Order'], aggfunc=len)
print (df)
Order completed iProgress
apple 4 2
banana 4 2
orange 4 2
pear 4 2
pineapple 4 2
#solution with groupby and transpose
df = df.groupby('Order').count().T
print (df)
Order completed iProgress
apple 4 2
orange 4 2
banana 4 2
pear 4 2
pineapple 4 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.