python - 如何按一列过滤数据并按另一列分组
问题描述
我对基于另一个字典的值的一个字典中的压缩计数值有疑问。
我在下面编写了这样一个代码,它代表了以下想法:
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}
解决方案
您可以使用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有很好的相关信息。
我希望这有帮助。
推荐阅读
- reactjs - React TypeScript:react-router-dom 中 useLocation() 的正确类型
- python - 使用“增益”时 LightGBM 如何计算特征重要性
- android - 在活动之间传递可变数据 (Kotlin) - 传递 NULL 而不是值
- excel - Excel公式从单个单元格中获取所有电子邮件地址
- jsp - 如何设置 jQuery datepicker 值?(“setDate”不起作用)
- python - 如何在特定帖子中显示评论
- javascript - 如何使用 JavaScript 动态添加 Vue 组件
- javascript - 电容器-admob Android 编译错误?
- c# - Type.GetTypeFromProgID() 返回 null,但 New-Object 在 Powershell 中工作
- python - 有没有更有效的方法来实现这一点?