用熊猫过滤

时间:2020-09-20 14:09:17

标签: python pandas dataframe

我正在研究以下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岁之间的男性凶杀案受害者。

我该怎么做才能使此过滤过程更有效?

2 个答案:

答案 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()