我在dataframe中有一个列,它看起来像这样
0 NaN
1 ["arts"]
2 ["sports", "tech"]
3 ["arts", "finance", "health", "sports", "science"...
4 ["finance", "sports", "tech"]
5 ["arts", "finance", "sports", "tech"]
6 ["arts", "finance", "health", "sports", "science"...
7 ["arts", "sports", "science"]我想知道艺术在所有这些列表中发生了多少次。然而,在尝试column.explode().value_counts(sort=True)时,我只得到了一个基本的发行版,其中包含了一些我不想要的选项。
["tech"] 5
["arts", "finance", "sports", "tech"] 2
["arts", "sports"] 2
["finance", "sports"] 1
["arts"] 1我甚至尝试使用计数器collections.Counter(itertools.chain.from_iterable(v.split(',') for v in column)),但是我得到了下面的错误'float' object has no attribute 'split'
有什么指示吗?
发布于 2022-07-26 13:07:11
如果column不是太长,那么一个简单的嵌套循环应该工作得很好:
count = 0
for str_list in column:
for name in str_list:
if name == "arts":
count += 1
print(count)发布于 2022-07-26 13:14:37
通过执行以下操作,可以创建包含艺术的行的掩码:
mask = df['industry'].apply(lambda x: 'comedy' in x)然后将数据限制在新的掩码上。
df = df[mask]从这里开始,您应该能够使用len(df)或类似的东西。
如果您要寻找的行业可以在每一行中出现不止一次,您可以使用您的迭代工具的想法。浮点数错误来自于试图拆分NaN,所以在尝试连接列表之前,请确保使用dropna()。
list(itertools.chain.from_iterable(df['industry'].dropna().values)).count('arts')https://stackoverflow.com/questions/73123842
复制相似问题