我在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
答案 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