首页 > 解决方案 > 如何按一列过滤数据并按另一列分组

问题描述

我对基于另一个字典的值的一个字典中的压缩计数值有疑问。

我在下面编写了这样一个代码,它代表了以下想法:

1)提取数据到列表

2) 为下一次处理取唯一值

3) 只为“意外”计算男女人数的循环

问题:

计算 uniqe 集中每个类别的值的有效解决方案是什么。我的意思是如果我有 1000 个 uniqe 类别,我不想写 1000 个“如果”

这是我在stackoverflow中的第一个问题,这就是为什么我对我犯的任何错误感到抱歉:)

Original data (first 5 rows):
[
['', 'year', 'month', 'intent', 'police', 'sex', 'age', 'race', 'hispanic', 'place', 'education'], 
['1', '2012', '01', 'Suicide', '0', 'M', '34', 'Asian/Pacific Islander', '100', 'Home', '4'], 
['2', '2012', '01', 'Suicide', '0', 'F', '21', 'White', '100', 'Street', '3'], 
['3', '2012', '01', 'Suicide', '0', 'M', '60', 'White', '100', 'Other specified', '4'], 
['4', '2012', '02', 'Suicide', '0', 'M', '64', 'White', '100', 'Home', '4']
]



# Accidents list
accidents_list = [row[3] for row in data] # list of all accidents

print(set(accidents_list)) # unique set 

{'凶杀','NA','未定','意外','自杀'}

gender_list = [row[5] for row in data]
print(gender_list)

['M','F','M','M','M','M','M','M','M','M','M','M',' M','M','M','M','M','M','M','M','M','F','F','M','M' ....]

# Accidents dict and loop over it
accidents_gender = {}

for i, v in enumerate(gender_list):
    if v not in accidents_gender:
        accidents_gender[v] = 0
    if accidents_list[i] == 'Accidental':
        accidents_gender[v] += 1

print(accidents_gender) # printing only values for accidental 

{'M':1421,'F':218}

标签: pythondata-science

解决方案


您可以使用Counter在此处记录)。

我会使用 Pandas(下面的示例),但如果这太过分了,这里有一种解决方法Counter

from collections import Counter

# Exclude header
data = data[1:]

# Filter accidents
accidents = filter(lambda x: x[3] == 'Accidental', data)

# Count by gender
by_gender = Counter(item[5] for item in accidents)
print(by_gender)

这是使用 Pandas 的一种方法:

import pandas as pd

df = pd.DataFrame.from_records(data=data[1:], columns=data[0])

# Filter 'Accidental', group by sex, get the size of each group
df = df[df['intent'] == 'Accidental'].groupby('sex').size()

# Print it out
with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print(df)

为此,您最好使用 Jupyter Notebook。Pandas 文档非常棒,但也有很多内容需要消化。这个 SO answer有很好的相关信息。

我希望这有帮助。


推荐阅读