【问题标题】:finding dataframe group count查找数据帧组计数
【发布时间】:2016-02-17 10:05:19
【问题描述】:

我有一个像

这样的数据框
       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|

我需要 = 每个客户进行交易的次数(客户数)和他们各自的类型数。例如。 cust1 DRAMA = 3,cust1 THRILLER = 2,同样适用于每个客户。

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

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

然后我知道如何过滤掉流派并获取计数(如果它在 LIST 中),但我对如何处理每组客户并获取每个客户的个别流派计数感到困惑。

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

请提出建议。

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案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 方法根据客户创建集群并将列相加。聚合将静默删除它无法添加的列,在本例中为原始的 Genres 列。

    【讨论】:

    • 我们能否在流派字段下创建一个多索引类型的东西,并将每个流派类别(动作、冒险、喜剧)保留在该父字段流派字段下?
    • 而且我不希望客户字段作为索引。如果我正在执行 reset_index(),我会得到一个未命名的额外字段 o 作为字段和一个名为 o 的索引。然后我需要删除那个额外的未命名 0 字段。有没有办法获得正常的索引,客户作为该代码中的一个字段。因为将客户字段作为索引进一步处理变得很忙。
    • 在 groupby 和聚合之后重置索引会为您提供一个标题为“客户”的新列,其中包含标准数字索引。我不确定如何使用多索引执行您想要的操作,您可以考虑提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2015-07-10
    • 1970-01-01
    • 2017-05-07
    • 2021-07-20
    • 2022-01-08
    • 2021-09-23
    相关资源
    最近更新 更多