我有一个 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
答案 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])