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,并将其分配到一个新列中。一旦有了包含所有字典计数的列,就有了一个方法可以将这些字典合并到一个列中并更新计数李>