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

时间:2021-01-08 08:52:24

标签: python pandas dataframe

在python中,我有一个这样的数据框

<头>
水果
詹姆斯 [苹果、梨、苹果]
彼得 [苹果、梨、苹果]

我想得到苹果和梨的数量。非常感谢这方面的任何帮助。

<头>
水果 苹果
詹姆斯 [苹果、梨、苹果] 2 1
彼得 [苹果、梨、苹果] 2 1

我试过用这个:

d['Apple'] = (d.Fruits == 'Apple').sum() and
d['Apple'] = (d.Fruits.values == 'Apple').sum()

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

使用 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)

答案 2 :(得分:2)

您可以将 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

答案 3 :(得分:1)

对于任何列表,您都可以使用 Collections.Counter() 它适用于一个简单的逻辑,例如Counter(item)您可以循环整个列表并计算您的项目,它将提供您的输出。

相关问题