返回满足分组条件的行

时间:2021-03-18 22:39:40

标签: python pandas pandas-groupby

我有一个 Pandas 数据框 raw_data,我试图找出 day,其中当 {{1 }} 在第 2 天和第 4 天。

换句话说,如果 value,则返回 Well_ID,其中观察到每个 Dist < std 的最大 Dist < std 以获得以下结果:

  • 好吧 A:第 4 天

  • 好吧 B:第 2 天

这就是 day 的样子:

<头>
WellID 距离 std value
A 3.2 8 1 282
A 9.6 8 2 600
A 4.1 8 3 56
A 7.4 8 4 295
A 12.0 8 5 312
B 2.3 10 1 203
B 4.7 10 2 212
B 18.1 10 3 365
B 3.5 10 4 202

是否可以像我在这里尝试的那样将所有这些链接在一起?

value

您可以使用以下代码复制示例:

WellID

2 个答案:

答案 0 :(得分:0)

由于您只对 Dist < std 所在的行感兴趣,我建议您在分组前输入该条件。然后,您可以使用 idxmax,它返回满足条件的索引。

# Declare mask because the name `raw_data` is too long for my liking
m = (raw_data['Dist'] < raw_data['std'])
# Get indices where condition is met
idx = raw_data[m].groupby('WellID')['value'].idxmax().values.tolist()
# Get the days of these indices
raw_data.iloc[idx][['WellID','day']]

  WellID  day
3      A    4
6      B    2

答案 1 :(得分:0)

如果您在分组之前过滤掉不需要的行并按值列排序 - 您可以使用 .last()

>>> raw_data.query('dist < std').sort_values('value').groupby('Well_ID').last()
         dist  std  day  value
Well_ID                       
A         7.4    8    4    295
B         4.7   10    2    212

要在多天具有相同最大值的情况下获得第一天,您可以修改排序:

.sort_values(['value', 'day'], ascending=[1, 0])