如何计算大熊猫列表中一列值的总出现次数?

时间:2020-10-29 01:47:27

标签: python pandas

我有这个dataFrame,我想计算该列中的菜肴出现次数是一个列表。

res = tokenizer.decode(output)

我尝试过:

   |preferred_dishes
    ----------------------------------------------
1   |[Comida Variada, Comida Brasileira, Lanches]
2   |[Salgados, Lanches, Comida Japonesa]
10  |[Comida Chinesa, Comida Japonesa]
11  |[Pizza, Comida Brasileira, Lanches]
15  |[Comida Italiana, Comida Brasileira, Fruto...

还有另一种方法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用explodepd.Series()获得相同的效果:

df.preferred_dishes.explode().value_counts()

包含摘录的输出:

Lanches              3
Comida Brasileira    3
Comida Japonesa      2
Salgados             1
Fruto...             1
Comida Variada       1
Pizza                1
Comida Chinesa       1
Comida Italiana      1
Name: preferred_dishes, dtype: int64

答案 1 :(得分:1)

先前的答案非常适合pandas >= 0.25,因为Series.explode仅在0.25.0版的更高版本中有效。例如,我使用的是0.24.2的熊猫版本。

顺便说一句,您可以尝试一下以了解您的熊猫和相关的包装版本:

pd.show_versions()

因此,您可能对以下解决方案感兴趣,而不考虑熊猫版本。

counts = (df.reset_index(df.columns.drop('preferred_dishes',1).tolist())
    .preferred_dishes.str.replace('[', '')
    .str.replace(']', '')
    .str.split(',', expand=True)
    .stack()
    .value_counts()
    )
counts

输出:

 Lanches              3
 Comida Brasileira    3
 Comida Japonesa      2
 Fruto...             1
Salgados              1
Pizza                 1
Comida Chinesa        1
Comida Variada        1
Comida Italiana       1
dtype: int64

或更简单地说:

counts = pd.Series(df.preferred_dishes.str.replace('[', '')
                             .str.replace(']', '')
                             .str.split(',').sum()).value_counts()
counts

输出:

 Lanches              3
 Comida Brasileira    3
 Comida Japonesa      2
 Fruto...             1
Salgados              1
Pizza                 1
Comida Chinesa        1
Comida Variada        1
Comida Italiana       1
dtype: int64