如何按一列过滤数据并按另一列分组

时间:2018-12-28 12:26:51

标签: python data-science

我在基于另一个字典的值压缩一个字典中的计数值时遇到问题。

我在下面编写了这样的代码,表示以下内容:

1)提取要列出的数据

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

3)仅用于计算“意外”的男性和女性人数的循环

问题:

对uniqe集合中每个类别的值进行计数的有效解决方案是什么?我的意思是,如果我有1000个uniqe类别,我不想写1000个“ if's”

这是我在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 

{'杀人','不适用','不确定','意外','自杀'}

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}

1 个答案:

答案 0 :(得分:0)

您可以使用Counter(已记录here)。

我会使用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。熊猫文档非常棒,但也有很多需要摘要的内容。 This SO answer有很好的相关信息。

我希望这会有所帮助。