我有这个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...
还有另一种方法吗?
答案 0 :(得分:3)
您可以使用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
答案 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