【问题标题】:Pandas value_counts() with multiple matches in same rowPandas value_counts() 在同一行中有多个匹配项
【发布时间】:2021-01-07 23:50:59
【问题描述】:

我有分类数据(AB 等),其中多个匹配项可以存在于同一字段中,例如 A,B。我想将我的数据分成额外的行,只是为了计算每个值的实例数。

df = pd.DataFrame({"Values" : ["A", "B", "C", "A,B"]})
df
    Values
0   A
1   B
2   C
3   A,B

目前:

df["Values"].value_counts()
B       1
A,B     1
A       1
C       1
Name: Values, dtype: int64

我的理想功能应该是这样的:

df["Values"].value_counts(split = ",")
A    2
B    2
C    1
Name: Values, dtype: int64

【问题讨论】:

    标签: python pandas frequency-table


    【解决方案1】:

    使用Series.str.split,然后使用explode()

    print( df['Values'].str.split(',').explode().value_counts() )
    

    打印:

    A    2
    B    2
    C    1
    Name: Values, dtype: int64
    

    编辑:

    df = pd.DataFrame({"Values" : ["A", "B", "C", "A,B"]})
    print( df['Values'].str.split(',').explode().value_counts() )
    

    【讨论】:

    • AttributeError: 'Series' 对象没有属性 'explode'。
    • @FrancisSmart 我在 EDIT 中发布了完整代码。还是有错误?你用的是什么版本的熊猫?
    • 似乎仍然收到相同的错误版本 0.24.2。我会更新的。
    • @FrancisSmart 是的,explode() 是 0.25 版 - 您使用的是古版 pandas,可以升级吗?
    【解决方案2】:

    splitvalue_counts 之后尝试stack

    df.Values.str.split(',',expand=True).stack().value_counts()
    A    2
    B    2
    C    1
    dtype: int64
    

    【讨论】:

      【解决方案3】:

      如果您不需要担心计算同一行上的重复值Series.str.get_dummies + sum

      df['Values'].str.get_dummies(',').sum()
      
      A    2
      B    2
      C    1
      dtype: int64
      

      【讨论】:

        猜你喜欢
        • 2022-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多