Pandas Pivot table,如何将一系列列放入attribu值中

2024-05-19 00:24:12 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我道歉!这是我第一次使用堆栈溢出,所以我希望我做得对!我找了找,但找不到我要找的东西。 我对熊猫和Python也很陌生:) 我将试着举个例子,并且我会尽量弄清楚。在

我有一个包含30列的dataframe,其中包含购物车的信息,其中1列(order)有2个值,要么是completed of in progress。 我有大约20列的项目,比如苹果,橘子,香蕉。。。我需要知道一个苹果有多少次是完整的,有多少次是在进行中的。我决定使用带有聚合函数count的透视表。 这是数据帧的一个小例子:

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      |      |

我有我想要的输出,但是我要找的是一种更优雅的方法,可以选择很多列而不必手动输入。在

^{pr2}$

但是我想选择大约15列,所以我不想一个接一个地键入15次,我确信有一种简单的方法可以使用列号之类的方法来完成。假设我想从6到15选择列。在

我尝试过价值观之类的东西=[数据框列[6:15]],我也试过使用测向仪,但正如我所说,我是新来的,所以我可能用错了东西或者做了一些愚蠢的事情!在

有没有办法让它们按顺序排列?因为在我的回答中,它们似乎是按字母顺序排列的,我想保持列的顺序。所以应该是苹果,橘子,香蕉。。。在

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

我只是在寻找一种改进我的代码的方法,我希望我没有把事情搞得一团糟。谢谢您!在


Tags: 数据方法苹果apple堆栈order事情例子
2条回答

我想你可以用:

#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

^{pr2}$

What is the difference between size and count in pandas?

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

您的示例没有显示不在购物车中的项目的示例。我假设它是None或{}。如果这是正确的,那么我填充na值并计算有多少值大于0

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

enter image description here

相关问题 更多 >

    热门问题