在具有微分的组中找到最大值

Posted

技术标签:

【中文标题】在具有微分的组中找到最大值【英文标题】:Finding the maximum value in a group with differentiation 【发布时间】:2021-07-16 08:50:48 【问题描述】:

我有一个看起来像这样的 Pandas DataFrame:

index ID value_1 value_2
0 1 200 126
1 1 200 127
2 1 200 128.1
3 1 200 125.7
4 2 300.1 85
5 2 289.4 0
6 2 0 76.9
7 2 199.7 0

我的目标是找到每个ID-group(在本例中为 1,2)中的所有行,这些行具有 value_1 列的最大值。第二个条件是如果每组有多个最大值,则取value_2列中的最大值所在的行。

所以目标表应该是这样的:

index ID value_1 value_2
0 1 200 128.1
1 2 300.1 85

【问题讨论】:

【参考方案1】:

在所有 3 列中使用 DataFrame.sort_values,然后使用 DataFrame.drop_duplicates

df1 = (df.sort_values(['ID', 'value_1', 'value_2'], ascending=[True, False, False])
         .drop_duplicates('ID'))
print (df1)
   ID  value_1  value_2
2   1    200.0    128.1
4   2    300.1     85.0

【讨论】:

我还有一个问题:是否有可能在ID-group 中计算value_1value_2(没有0 值)的平均值? @Horst-Jackson - 你觉得df = df.set_index('ID').replace(0, np.nan).mean(level=0) 吗? 谢谢,正是我正在寻找的!

以上是关于在具有微分的组中找到最大值的主要内容,如果未能解决你的问题,请参考以下文章

在特定列 postgres 中选择具有最大值的组中的行

如何在sql中找到具有多个最大值的组的最大值?

LA 3268 号码簿分组(最大流+二分)

如何获取分组列具有最大值的组

Python:删除每组中具有最大值的行

拉取具有组中特定列最大值的mysql行[重复]