python pandas pivot_table在一列中计算频率

时间:2014-03-14 17:35:46

标签: python pandas

我还是Python大熊猫的新手。 pivot_table并且想要问一种方法来计算一列中的值的频率,该列也链接到另一列ID。 DataFrame如下所示。

import pandas as pd
df = pd.DataFrame({'Account_number':[1,1,2,2,2,3,3],
                   'Product':['A', 'A', 'A', 'B', 'B','A', 'B']
                  })

对于输出,我想得到如下内容:

                Product
                A      B
Account_number           
      1         2      0
      2         1      2
      3         1      1

到目前为止,我尝试了这段代码:

df.pivot_table(rows = 'Account_number', cols= 'Product', aggfunc='count')

这段代码给了我两个相同的东西。上面的代码有什么问题?我问这个问题的部分原因是这个DataFrame只是一个例子。我正在处理的真实数据有数万个account_numbers。感谢您的帮助!

4 个答案:

答案 0 :(得分:19)

您需要将aggfunc指定为len

In [11]: df.pivot_table(index='Account_number', columns='Product', 
                        aggfunc=len, fill_value=0)
Out[11]:
Product         A  B
Account_number
1               2  0
2               1  2
3               1  1

它看起来像是计数,正在计算每列的实例(Account_numberProduct),我不清楚这是否是一个错误...... < / p>

答案 1 :(得分:17)

在新版本的Pandas中,需要稍加修改。我不得不花一些时间搞清楚,所以只想在这里添加,以便有人可以直接使用它。

df.pivot_table(index='Account_number', columns='Product', aggfunc=len,
               fill_value=0)

答案 2 :(得分:6)

解决方案:使用switchMap(payload => { return new FooBar(); }

像此页面上的所有其他答案一样,使用aggfunc='size'aggfunc=len不适用于多于三列的DataFrame。默认情况下,pandas会将此aggfunc='count'应用于所有在aggfuncindex参数中找不到的列。

例如,如果我们在原始DataFrame中有另外两列定义如下:

columns

输出:

df = pd.DataFrame({'Account_number':[1, 1, 2 ,2 ,2 ,3 ,3], 
                   'Product':['A', 'A', 'A', 'B', 'B','A', 'B'], 
                   'Price': [10] * 7,
                   'Quantity': [100] * 7})

如果将当前解决方案应用于此DataFrame,则会得到以下信息:

   Account_number Product  Price  Quantity
0               1       A     10       100
1               1       A     10       100
2               2       A     10       100
3               2       B     10       100
4               2       B     10       100
5               3       A     10       100
6               3       B     10       100

输出:

df.pivot_table(index='Account_number',
               columns='Product',
               aggfunc=len,
               fill_value=0)

解决方案

请使用 Price Quantity Product A B A B Account_number 1 2 0 2 0 2 1 2 1 2 3 1 1 1 1 。由于aggfunc='size'的每一列总是返回相同的数字,因此pandas不会在每一列上都调用它,而是只调用一次。

size

输出:

df.pivot_table(index='Account_number', 
               columns='Product',
               aggfunc='size',
               fill_value=0)

答案 3 :(得分:2)

您可以使用count df.pivot_table(index='Account_number', columns='Product', aggfunc='count')