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

我有这个数据框,我想计算该列中菜肴出现的次数(列表)。


   |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()

还有别的办法吗?


呼啦一阵风
浏览 101回答 2
2回答

哆啦的时光机

您可以使用explode以下命令来获得相同的效果pd.Series():df.preferred_dishes.explode().value_counts()包含摘录的输出:Lanches              3Comida Brasileira    3Comida Japonesa      2Salgados             1Fruto...             1Comida Variada       1Pizza                1Comida Chinesa       1Comida Italiana      1Name: preferred_dishes, dtype: int64

肥皂起泡泡

之前的答案非常适合,pandas >= 0.25因为Series.explode仅在版本 0.25.0 的更高版本中工作。例如,我使用的是 pandas 版本 0.24.2。顺便说一句,你可以尝试一下,以了解你的 pandas 和相关包的版本:pd.show_versions()因此,您可能对以下解决方案感兴趣,而不考虑 pandas 版本。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...             1Salgados              1Pizza                 1Comida Chinesa        1Comida Variada        1Comida Italiana       1dtype: 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...             1Salgados              1Pizza                 1Comida Chinesa        1Comida Variada        1Comida Italiana       1dtype: int64
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python