Python Pandas DF - 具有另一列的相应频率计数的组列

时间:2016-06-07 15:01:58

标签: python pandas dataframe pivot-table

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

1 个答案:

答案 0 :(得分:2)

您可以先将字符串cat添加到值,但需要astypeint投射到str。然后使用pivot_table和上一次rename_axispandas 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