根据 pandas 数据框中的条件将 value_counts 与 groupby 函数一起使用并插入新列

Posted

技术标签:

【中文标题】根据 pandas 数据框中的条件将 value_counts 与 groupby 函数一起使用并插入新列【英文标题】:Use value_counts with a groupby function based on a condition in pandas dataframe and insert into a new column 【发布时间】:2020-08-15 09:32:32 【问题描述】:

我有一个包含多行的大型数据集,如附图所示。根据Country,我正在尝试获取value_counts 以获得MalesFemales 的总和(在gender 列中)。我还需要满足Hague 字段为YesNo 的条件。所以有一个Male/No 和一个Male/YesFemale 也是如此。我正在尝试在countriesHague 上使用 groupby 函数,公式如下:

data_df.groupby('Country')['Gender'].apply(lambda x: x[x== 'M'].count())

使用它,我可以获得特定 gender 的计数,每个 country,但我无法弄清楚将 Hague 设为“YES”和“NO”的条件。

我还想出了如何只在可以选择特定性别和海牙身份的行中添加行。但我不知道如何计算性别列中的男性/女性数量

data_df.loc[(data_df['Hague'] =='NO') & (data_df['Gender'] =='M')]

Image of the main dataset called data_df

【问题讨论】:

请提供MRE 以改进您的问题并便于回答。 我编辑了原始问题,希望对您有所帮助。我是新手 没有问题,这就是提示的原因。顺便说一句,如果你投票给他的答案,你可以让回答者高兴。顺便说一句,请花点时间阅读tour,并享受该网站... 【参考方案1】:

感谢@wwnde,我找到了代码!

data_df.loc[(data_df['Hague'] =='NO') & (data_df['Gender'] =='M')].groupby('Country')['Gender'].value_counts()

【讨论】:

满意还是需要更多帮助?很高兴继续提供帮助【参考方案2】:

不确定我是否理解您,但请尝试。让我们知道是否相反,我们会提供帮助

数据

df=pd.DataFrame('Hague':['NO', 'YES', 'YES','YES','YES','YES','YES','NO','YES'],'Country':['AFGHANISTAN', 'ALBANIA', 'ALBANIA','ALBANIA','ALBANIA','ALBANIA','ALBANIA','ANTIGUA AND BARBUD','ARMENIA'],'Age':[12,2,4,3,3,9,3,12,1],'Gender':['M', 'M', 'M','F','M','F','M','F','M'])

过滤海牙/性别

  df[((df['Hague']=='YES')& (df['Gender']=='M'))].groupby('Country')['Gender'].value_counts()

结果

【讨论】:

我试了一下,出现索引错误(IndexError: boolean index does not match indexed array along dimension 0; dimension is 0 but对应的布尔维度是1) 请给我一份你的数据样本。也许您的列名称不同,或者我们有不同的 dtype。乐于助人 我也试过 data_df[(data_df['Hague']=='Yes')] & data_df.groupby('Country')['Gender'].value_counts() 但我得到一个 ValueError ....不能加入没有重叠的索引名称 我的解决方案输出一个数据框而不是一个系列。您不能将其分配给列。您是否愿意复制粘贴您的数据并简要说明您想要什么,以便我提供帮助 这里是数据的副本。我想统计每个国家/地区的性别。但只有当海牙地位说“不”时。那是我感到困惑的部分,过滤海牙列的行。我知道 value_counts() 可以做到这一点。海牙 国家 年龄 性别 否 阿富汗 12 M 是 阿尔巴尼亚 2 M 是 阿尔巴尼亚 4 M 是 阿尔巴尼亚 3 F 是 阿尔巴尼亚 3 M 是 阿尔巴尼亚 9 F 是 阿尔巴尼亚 3 M 否 安提瓜和巴布达 12 F 是 亚美尼亚 1 MI 还包括原始帖子中的屏幕截图

以上是关于根据 pandas 数据框中的条件将 value_counts 与 groupby 函数一起使用并插入新列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:如何根据特定列上特定值的条件选择数据框中的行[重复]

根据 pandas df 中的多个条件映射不同的数据帧

根据条件从 spark 数据框中删除行

当条件为真时,Pandas将数据帧分成多个

如何根据列中的最新日期聚合 pandas 数据框中的行?

如何为 pandas 数据框中的不同组分配唯一 ID?