我有一个Python数据框。在其中,我有一栏包含不同的人,另一栏包含他们购买的不同产品。 我尝试为每个人创建一个他们购买每种产品的金额的摘要。因此,我尝试按人员和产品进行分组并进行计数,但不知何故我遇到了麻烦。
在下面找到一个小玩具示例。
import pandas as pd
# Create toy data frame
A = [0,0,1,2,2,2,0]
B = ['Person1','Person1','Person1','Person1','Person2','Person2','Person 2']
df = pd.DataFrame([A,B]).transpose()
df.columns = ['cat', 'per']
# Desired Output
Cat0 Cat1 Cat2
Person 1 2 1 1
Person 2 1 0 2
最佳答案
您可以先将字符串 cat
添加到值中,但需要通过 astype
将 int
转换为 str
。然后使用pivot_table
最后rename_axis
(pandas
0.18.0
中的新功能):
import pandas as pd
# Create toy data frame
A = [0,0,1,2,2,2,0]
B = ['Person1','Person1','Person1','Person1','Person2','Person2','Person2']
df = pd.DataFrame([A,B]).transpose()
df.columns = ['cat', 'per']
print (df)
cat per
0 0 Person1
1 0 Person1
2 1 Person1
3 2 Person1
4 2 Person2
5 2 Person2
6 0 Person2
df['cat'] = 'cat' + df.cat.astype(str)
df = df.pivot_table(index='per', columns='cat', aggfunc=len,fill_value=0)
df = df.rename_axis(None).rename_axis(None, axis=1)
#if use older pandas as 0.18.0
#df.columns.name= None
#df.index.name= None
print (df)
cat0 cat1 cat2
Person1 2 1 1
Person2 1 0 2
关于Python Pandas DF - 将列与另一列的相应频率计数分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37682921/