python - 返回满足分组条件的行
问题描述
我有一个 pandas 数据框,raw_data
我试图确定在第 2 天和第 4 天的每组时间中最大值发生的day
位置。value
Well_ID
Dist < std
换句话说,如果Dist < std
,返回每个观察到day
最大值的位置以获得以下结果:value
WellID
A:第 4 天
井 B:第 2 天
这raw_data
看起来像:
井号 | 区 | 性病 | 天 | 价值 |
---|---|---|---|---|
一个 | 3.2 | 8 | 1 | 282 |
一个 | 9.6 | 8 | 2 | 600 |
一个 | 4.1 | 8 | 3 | 56 |
一个 | 7.4 | 8 | 4 | 295 |
一个 | 12.0 | 8 | 5 | 312 |
乙 | 2.3 | 10 | 1 | 203 |
乙 | 4.7 | 10 | 2 | 212 |
乙 | 18.1 | 10 | 3 | 365 |
乙 | 3.5 | 10 | 4 | 202 |
是否可以像我在这里尝试做的那样将所有这些链接在一起?
final_data['peak_day'] = raw_data.groupby('Well_ID').agg(max('value')).where(raw_data['dist']<raw_data['std'])['Day']
您可以使用以下代码复制示例:
raw_data = pd.DataFrame({'WellID':['A','A','A','A','A','B','B','B','B'],
'Dist':[3.2,9.6,4.1,7.4,12,2.3,4.7,18.1,3.5],
'std':[8,8,8,8,8,10,10,10,10],
'day':[1,2,3,4,5,1,2,3,4],
'value':[282,600,56,295,312,203,212,365,202]})
解决方案
由于您只对 where 行感兴趣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
推荐阅读
- postgresql - Entity Framework Core PostgreSQL hstore 查询
- javascript - React.js TypeError:模块不是函数
- angular - 如何以角度保存作为字节 [] 提供的文件?
- python - 在烧瓶中打印 python 返回
- selenium-webdriver - (SessionNotCreatedException) 会话未创建:此版本的 ChromeDriver 仅支持 Chrome 版本 83
- python - 无法理解python装饰器功能
- python - 整个函数等待而不是某些进程等待
- c++ - 为什么 `file_pointer{0}` 编译但 `file_pointer(0)` 不编译?
- python - 对字典列表中的每个字典进行排序,分别按其值 - Python
- python - 从提取的 zip 文件中记录 xls 和 xlsx 文件位置