查找数据帧组计数

时间:2015-11-16 10:30:42

标签: python regex pandas dataframe

我有一个像

这样的数据框
       customer         genre
0      cust1           |BIOPIC|DRAMA|
1      cust2           |COMEDY|DRAMA|ROMANCE|
2      cust1           |DRAMA|THRILLER|
3      cust3           |COMEDY|HORROR|
4      cust4           |HISTORY|ROMANCE|WAR|
5      cust3           |ADVENTURE|COMEDY|
6      cust2           |ACTION|DRAMA|THRILLER|
7      cust1           |CRIME|DRAMA|THRILLER|
8      cust3           |HISTORY|ROMANCE|WAR|
9      cust2           |ADVENTURE|COMEDY|
10     cust4           |BIOPIC|DRAMA|HISTORY|THRILLER|

我需要=每个客户进行交易的次数(客户数量)及其各自的流派数量.Eg。 cust1 DRAMA = 3,cust1 THRILLER = 2,对每个客户来说都是明智的。

我确实找到了每个客户的数量

df = df.groupby(['cust']).size()

然后我知道如何过滤掉这些类型并获得计数,如果它在列表中,但我对如何处理每组客户并获得每个客户的个人类型计数感到困惑。

从流派表达式中过滤(|)并将字段输出。

请建议。

1 个答案:

答案 0 :(得分:1)

功能str.get_dummies非常适合此类事情!它就像dataframe version一样,但在字符串上,允许您指定分隔符。假设您的数据框名为df,则下面的代码会执行您的操作:

import pandas as pd
import numpy as np   
df = pd.concat([df, df.Genres.str.get_dummies(sep='|')], axis=1)
df = df.groupby("Customers").aggregate(np.sum)

print(df)

输出:

           ACTION  ADVENTURE  BIOPIC  COMEDY  CRIME  DRAMA  HISTORY  HORROR  \
Customers
cust1           0          0       1       0      1      3        0       0
cust2           1          1       0       2      0      2        0       0
cust3           0          1       0       2      0      0        1       1
cust4           0          0       1       0      0      1        2       0

为了解释一下,str.get_dummies方法为它在指定列中看到的每个值创建一个新列,然后为存在的值标记1,在其他地方标记0。 GroupBy和Aggregate方法根据客户创建集群并添加列。 Aggregate会默默地删除无法添加的列,在这种情况下是原始的Genres列。