我还是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。感谢您的帮助!
答案 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_number
和Product
),我不清楚这是否是一个错误...... < / 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'
应用于所有在aggfunc
或index
参数中找不到的列。
例如,如果我们在原始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')