根据 pandas 中的字典对数据帧的行进行分组并对相应的分子求和

Posted

技术标签:

【中文标题】根据 pandas 中的字典对数据帧的行进行分组并对相应的分子求和【英文标题】:Group rows of dataframe according to dictionary in pandas and sum corresponding numerators 【发布时间】:2021-12-18 19:03:32 【问题描述】:

我有一个错误代码、分子及其分母的数据框,以及每个可能的错误代码及其总体错误类型的字典。我想按错误类型对数据框中的错误代码进行分组,将它们的分子相加,并保持分母列不变。我试过了

grouped = day1_xione.set_index('error_code').groupby(by=map_values,axis=1).sum().reset_index()
grouped

但它只保留错误代码并且不按类型对它们进行分组。这是数据样本的样子:

数据框:

error_code Numerator Denominator
POWER CYCLE ON 5 10
POWER OFF 1 10
PANIC - PANIC -PANIC_1 5 10
TEMP_HIGH-TEMP 0 10
UNKNOWN-Reason_Unknown 9 10

对于显示的错误代码,有 56 个错误。每个错误代码都是一个字符串,直接匹配字典中的代码。

字典:

map_values = 
'POWER CYCLE ON' : 'POWER RESET',
'POWER OFF': 'POWER RESET',
'PANIC - PANIC -PANIC_1': 'DEVICE PANIC',
'TEMP_HIGH-TEMP': 'OTHER',
'UNKNOWN-Reason_Unknown': 'OTHER'

57 个代码和 10 种类型。

期望的输出:

error_code Numerator Denominator
POWER RESET 6 10
DEVICE PANIC 5 10
OTHER 9 10

所有出现的错误代码

【问题讨论】:

【参考方案1】:

您已经很接近了,您需要使用mapgroupby 映射值,并使用agg 进行不同功能的聚合(sumfirst

(df.groupby(df['error_code'].map(map_values))
   .agg('Numerator': 'sum', 'Denominator': 'first')
   .reset_index()
)

输出:

     error_code  Numerator  Denominator
0  DEVICE PANIC          5           10
1         OTHER          9           10
2   POWER RESET          6           10

【讨论】:

谢谢!这似乎应该可以工作(我确实得到了我需要的列,但没有行),但我认为我仍然存在数据问题。即使在手动检查我的数据框和字典以确保错误代码匹配之后,python 也不会将它们识别为匹配项。我什至尝试只进行连接,但数据也不会与之合作。 请提供一个不起作用的例子和预期的输出 我能够通过将所有字符串全部转换为大写字母来解决此问题。

以上是关于根据 pandas 中的字典对数据帧的行进行分组并对相应的分子求和的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地迭代 Pandas 数据帧的连续块

pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用groups属性获取每个分组的样本对应的在原dataframe中的行索引位置列表

根据 Pandas 中的组大小对分组数据进行排序

根据 3 到 4 个条件对数据库表中的行进行计数和分组查询

如何根据条件对sql中的行进行分组

按两个参数对字典列表进行分组并计算分组值