Python 如何用Numpy而不是Pandas计算满足条件的和

Python 如何用Numpy而不是Pandas计算满足条件的和,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据框,有4列(姓名、性别、出生人数),我想计算女性和男性的总数,我必须按性别分组。 我已经对熊猫这样做过: names1880.groupby(['Gender']).sum() 我有一个像这样的输出 Gender----|----Births F | 166868 ----------|------------ M | 120851 但是现在我必须用Numpy而不是Pandas来做。如果你使用出生计数作为权重,bincount是一个很好的

我有一个数据框,有4列(姓名、性别、出生人数),我想计算女性和男性的总数,我必须按性别分组。 我已经对熊猫这样做过:

names1880.groupby(['Gender']).sum()

我有一个像这样的输出

Gender----|----Births
F         |    166868
----------|------------
M         |    120851

但是现在我必须用Numpy而不是Pandas来做。如果你使用出生计数作为权重,bincount是一个很好的工具。但是
bincount
要求类别为整数。如果您首先为每个性别创建一个具有不同整数的数组,那么您可以在numpy中执行此操作,如下所示:

import pandas as pd
import numpy as np

names1880 = pd.DataFrame({
    'Name': ['Walter', 'Roger', 'Jane', 'Imelda'],
    'Gender': ['Male', 'Male', 'Female', 'Female'],
    'Births': [100, 200, 120, 220]
})

gender_names, gender_codes = np.unique(
    names1880['Gender'], return_inverse=True
)
print(gender_names)
print(np.bincount(gender_codes, weights=names1880['Births']))

# ['Female' 'Male']
# [340. 300.]

将pandas DataFrame转换为numpy结构化阵列时,请参考此SO答案:

结果:

female 6
male 3

最后,我简单地做到了: 要计算所有出生人数:

All_births = names1880.sum()
为了过滤,我做了如下工作:

names1880[names1880['Gender'] == "F"].sum()


谢谢,但它不工作,我有一个错误:ValueError:无法将字符串转换为float:'F'。我必须计算变量的总和而不是计数:'(@SarahKraiem我先添加了一些代码来对性别进行分类,这样bincount就可以使用它们了。请注意,如果使用出生计数作为权重,bincount将计算出生计数的总和。试试这个
np.unique(a,return\u counts=True)
也看看这是否有帮助
names1880[names1880['Gender'] == "F"].sum()
names1880[names1880['Gender'] == "M"].sum()