【问题标题】:value counts problem in a column contained a list (python)包含列表的列中的值计数问题(python)
【发布时间】:2022-11-14 09:39:57
【问题描述】:

value_counts 无法计算列表中的值。

你好, 我的dataframe 中的一些columns 有list。

X Y
101 ['A']
200 ['A','O']
32 ['B']
41 ['A','AB,'O']
202 ['A']

当我使用 value_counts() 时;我得到这个结果:

['A'] 2
['A' , 'O'] 1
['B'] 1
['A','AB','O'] 1

但我想要这个结果:

['A'] 4
['O'] 2
['B'] 1
['AB'] 1

有没有code 呢?

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    您可以收集列表,解包项目(使用itertools.chain)然后计数(使用collections.Counter)并将其放回熊猫对象

    from itertools import chain
    from collections import Counter
    df['Y'] = df['Y'].apply(lambda x: eval(x)) #converts to list
    pd.Series(Counter(chain.from_iterable(df['Y'].values)))
    

    输出

    A     4
    O     2
    B     1
    AB    1
    

    【讨论】:

    • 谢谢,我试过你的答案,但它不适用于 AB 。它给了我 A B O。
    • 您可能应该向我们展示您的df['Y'] 的样子——即print(df['Y']) 的输出以确保我们使用相同的输入
    • dtype is object ? 是不工作的原因吗?
    • 您可以使用 eval 转换 dtype - 请参阅编辑后的答案
    【解决方案2】:

    我认为explode 会为你工作

    import pandas as pd
    df = pd.DataFrame({"a": [['A'], ['A', 'O'], ['B'], ['A', 'AB', 'O'], ['A']]})
    df["a"].explode().value_counts()
    
    # output
    A     4
    O     2
    B     1
    AB    1
    
    # If your dataframe is like this
    from ast import literal_eval
    df = pd.DataFrame({"a": ["['A']", "['A', 'O']", "['B']", "['A', 'AB', 'O']", "['A']"]})
    df["a"].apply(literal_eval).explode().value_counts()
    

    【讨论】:

    • 谢谢,我试过你的答案,但它不起作用。结果和过去一样。 dtype is object ? 是不工作的原因吗?
    • 我认为您的 dtype 不正确,因为如果您运行我的代码,它将起作用,所以您可以做什么让我编辑我的答案。检查我的编辑,让我知道这是否适合你。
    猜你喜欢
    • 2020-08-02
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2018-05-05
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多