如何计算Pandas中列表列中出现的值的总数?

2024-10-04 03:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据框,我想计算一下列表中出现的菜肴的数量

   |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...

我试过这个:

test = pd.Series([x for item in df_dishes.preferred_dishes for x in item]).value_counts()

还有别的办法吗


Tags: 数据in列表for数量itempreferred菜肴
2条回答

前面的答案非常适合pandas >= 0.25,因为Series.explode只在0.25.0版本的更高版本中工作。例如,我使用的是0.24.2的pandas版本

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

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

您可以使用explode来获得与pd.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

相关问题 更多 >