我有一个像
这样的数据框 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()
然后我知道如何过滤掉这些类型并获得计数,如果它在列表中,但我对如何处理每组客户并获得每个客户的个人类型计数感到困惑。
从流派表达式中过滤(|)并将字段输出。
请建议。
答案 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
列。