计算单元格中列表中字符串的出现次数



在python中,我有一个类似的数据帧

水果
James [苹果、梨、苹果]
Peter [苹果,梨,苹果]

如果性能很重要并且需要计算所有值,则解决方案:

from collections import Counter
df = df.join(pd.DataFrame([Counter(x) for x in df.Fruits.to_numpy()], index=df.index))
print (df)
Fruits  Apple  Pear
James  [Apple, Pear, Apple]      2     1
Peter  [Apple, Pear, Apple]      2     1

如果需要单独测试值:

df['Apple'] = df.Fruits.apply(lambda x: sum(y == 'Apple' for y in x))
df['Pear'] = df.Fruits.apply(lambda x: sum(y == 'Pear' for y in x))

使用value_counts+concat:

res = pd.concat((df, df['Fruits'].apply(pd.Series.value_counts)), 1)
print(res)

输出

Fruits  Apple  Pear
James  [Apple, Pear, Apple]      2     1
Peter  [Apple, Pear, Apple]      2     1

一种更通用的方法是:

res = pd.concat((df, df['Fruits'].apply(pd.Series.value_counts).fillna(0)), 1)
print(res)

您可以将df.explodegroupby.value_countsunstack:一起使用

out = (df.join(df['Fruits'].explode().groupby(level=0).value_counts()
.unstack(fill_value=0)))

print(out)
Fruits  Apple  Pear
James  [Apple, Pear, Apple]      2     1
Peter  [Apple, Pear, Apple]      2     1

对于任何列表,您都可以使用Collections.Counter()它使用一个简单的逻辑,比如Counter(item)。你可以循环你的整个列表,并对你的项目进行计数,它会给出你的输出。

最新更新