Python 在第列,用逗号分隔的句子数一数单词

Python 在第列,用逗号分隔的句子数一数单词,python,database,pandas,count,Python,Database,Pandas,Count,假设我的数据框是 Name Value 0 K apple,banana 1 Y banana 2 B orange,banana 3 Q grape,apple 4 C apple,grape 我想数一数“值”列中的单词,所以当我申请时 pd.Series(np.concatenate([x.split()表示df.Value中的x])).Value\u counts() pd.Series(''.join(df.Value).split()).

假设我的数据框是

  Name  Value
0   K   apple,banana
1   Y   banana
2   B   orange,banana
3   Q   grape,apple
4   C   apple,grape
我想数一数“值”列中的单词,所以当我申请时

pd.Series(np.concatenate([x.split()表示df.Value中的x])).Value\u counts()

pd.Series(''.join(df.Value).split()).Value\u counts()

作为输出:

apple,banana : 1
banana : 1
orange,banana : 1
grape,apple : 1
apple,grape : 1
但是

输出我想要的内容

apple : 3
banana : 3
orange : 1
grape : 2 
我该怎么做

感谢阅读。

请尝试以下内容:

df['Value'].str.split(',', expand=True).stack().value_counts()
输出:

apple     3
banana    3
grape     2
orange    1
dtype: int64

使用熊猫的
str
访问器,然后
split
on',
stack
将列放入行索引中,并使用
value\u计数

您可以这样做,假设
文件
包含您的输入:

import pandas as pd
df=pd.read_csv('file',sep='\s+')
itemslist=[i.split(',') for i in df['Value'].tolist()]
allitems=[item for sublist in itemslist for item in sublist]

for fruit in [ele for ind, ele in enumerate(allitems,1) if ele not in allitems[ind:]]:
    print("{} {}".format(fruit,allitems.count(fruit)))

您可以通过三种方式实现这一点:

  • 或者,您可以将列隔离为df['col'].tolist()的列表,然后拆分列表中的每个项目。这将为您提供一个列表,您需要将这些列表展平,然后使用集合。该列表上的计数器
  • pandas的方法是隔离此列,并使用以下内容扩展它: . 这可以为您提供一个包含所有这些单词的稀疏数据帧。然后,您可以遍历所有列,并在合并这些计数后,对每个列执行值_计数。(斯科特·波士顿的回答)
  • 第三种也是更具python风格的方法是定义一个新方法,该方法可以为每一行返回一个计数器dict,并将其分配到一个新列中。一旦有了包含所有字典计数的列,就有了一个方法可以将这些字典合并到一个列中并更新计数
使用`collections.Counter()`应该可以工作。