python - Pandas数据透视表,如何在values属性中放置一系列列

标签 python pandas

首先向大家道歉!这是我第一次使用堆栈溢出,所以我希望我做得对!我搜索过但找不到我要找的东西。 我对 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

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

关于python - Pandas数据透视表,如何在values属性中放置一系列列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876155/

相关文章:

python - 如何异或等于十六进制字符串?

python - 等同于 Python 中 R 的 removeSparseTerms

python - 如何在 python 中将数字作为具有一组位数的二进制字符串返回

java - 尝试 - 除了在 Python 中给定的时间

python - pandas 根据日期时间条件删除行

python - 当列中存在子字符串时加 1

python - 在 networkx/python 中为 * 搜索启发式分配 x、y 坐标

python - 如何读取多个csv文件并合并它们?

python - Pandas 每月滚动窗口

python - 如何在plotly3(不是plotly4)中并排绘制表格和散点图