我仍然是Python pandas的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']
})
Run Code Online (Sandbox Code Playgroud)
对于输出,我想得到如下内容:
Product
A B
Account_number
1 2 0
2 1 2
3 1 1
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试了这段代码:
df.pivot_table(rows = 'Account_number', cols= 'Product', aggfunc='count')
Run Code Online (Sandbox Code Playgroud)
这段代码给了我两个相同的东西.上面的代码有什么问题?我问这个问题的部分原因是这个DataFrame只是一个例子.我正在处理的真实数据有数万个account_numbers.感谢您的帮助!
And*_*den 24
您需要指定aggfuncas 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
Run Code Online (Sandbox Code Playgroud)
它看起来像count,正在计算每列(Account_number和Product)的实例,我不清楚这是否是一个bug ...
Pag*_*Max 17
在新版本的Pandas中,需要稍加修改.我不得不花一些时间搞清楚,所以只想在这里添加,以便有人可以直接使用它.
df.pivot_table(index='Account_number', columns='Product', aggfunc=len,
fill_value=0)
Run Code Online (Sandbox Code Playgroud)
Ted*_*rou 11
解决方案:使用aggfunc='size'
使用aggfunc=len或aggfunc='count'类似于此页面上的所有其他答案将不适用于多于三列的DataFrame。默认情况下,pandas会将其应用于aggfunc所有在index或columns参数中找不到的列。
例如,如果我们在原始DataFrame中定义了另外两列,如下所示:
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})
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
如果将当前解决方案应用于此DataFrame,则会得到以下信息:
df.pivot_table(index='Account_number',
columns='Product',
aggfunc=len,
fill_value=0)
Run Code Online (Sandbox Code Playgroud)
输出:
Price Quantity
Product A B A B
Account_number
1 2 0 2 0
2 1 2 1 2
3 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
而是使用aggfunc='size'。由于size总是为每一列返回相同的数字,因此pandas不会在每一列上都调用它,而只会调用一次。
df.pivot_table(index='Account_number',
columns='Product',
aggfunc='size',
fill_value=0)
Run Code Online (Sandbox Code Playgroud)
输出:
Product A B
Account_number
1 2 0
2 1 2
3 1 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32396 次 |
| 最近记录: |