Pandas Pivot表,如何在values属性中放置一系列列

时间:2016-11-29 21:34:27

标签: python pandas

首先,我道歉!这是我第一次使用堆栈溢出,所以我希望我做得对!我搜索但无法找到我正在寻找的东西。 我对熊猫和蟒蛇也很新:) 我将尝试使用一个例子,我会尽力清楚。

我有一个包含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之间选择列。

我尝试过像= [df.columns [6:15]]之类的东西,我也尝试过使用df.iloc,但正如我所说,我很新,所以我可能使用错误的东西或制造愚蠢的东西!

还有办法让他们按照他们的顺序获得吗?因为在我的回答中,他们似乎按字母顺序排序,我想保持列的顺序。所以它应该是苹果,橙子,香蕉......

Order        Completed    In progress  
apple          92             221
banana         102            144
mango          70             55

我正在寻找一种改进代码的方法,我希望我没有弄得太多。谢谢!

2 个答案:

答案 0 :(得分:2)

我认为你可以使用:

a^2 + csc(a)
#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

What is the difference between size and count in pandas?

#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

答案 1 :(得分:1)

您的示例并未显示购物车中没有商品的示例。我假设它出现在None0。如果这是正确的,那么我填写na值并计算大于0

的数量
df.set_index('Order').fillna(0).gt(0).groupby(level='Order').sum().T

enter image description here