我正在研究以下dataset(基本上是代表美国枪击死亡人数的数据集),并且我试图证明“大约三分之二的凶杀受害者是男性15--34岁年龄段是黑人”。
这是我的尝试:
data = pd.read_csv("./guns-data-master/full_data.csv")
homicides = data[data['intent'] == 'Homicide']
male_homicides = homicides[homicides['sex'] == 'M']
less_thirty_four = male_homicides[male_homicides['age'] <= 34.0]
within_range = less_thirty_four[less_thirty_four['age'] >= 15.0]
within_range.race.value_counts()
基本上可以给我足够的信息来证明我想要的。但是,我相信必须有一种更简便,更有效的方法来过滤掉所有15岁至34岁之间的男性凶杀案受害者。
我该怎么做才能使此过滤过程更有效?
答案 0 :(得分:1)
除了@hypnos提到的内容外,另一种实现方法(可能具有更好的可读性)是使用query方法。
url = "https://raw.githubusercontent.com/fivethirtyeight/guns-data/master/full_data.csv"
df = pd.read_csv(url, index_col=[0])
df.query("age >= 25 and age <= 34 and intent == 'Homicide' and sex == 'M'") \
.race \
.value_counts()
Black 5901
White 1568
Hispanic 1564
Asian/Pacific Islander 122
Native American/Native Alaskan 90
答案 1 :(得分:0)
尝试一下:
data = pd.read_csv("./guns-data-master/full_data.csv")
homicides = data[(data['intent'] == 'Homicide') & (data['sex'] == 'M') & (data['age'] <= 34.0) & (data['age'] >= 15.0) ]
homicides.race.value_counts()