pandas - 根据下一行的值更新当前行
问题描述
我有以下数据框:
df = pd.DataFrame({'ID': ['1','1','1','1','2','2','2'], \
'episode': ['111', '112','113', '114','115','116','117'], \
'risk': ['L', 'L','H', 'L','H','L','L'], \
'date': ['21-01-2015', '27-02-2015','19-03-2015', '09-05-2015','3-01-2015','7-02-2015','11-05-2015']})
每个 ID 中可能有几行(不同的情节编号),并且每一行都有一个风险标识为 L 或 H。我想检查每个 ID 是否存在风险 H。一旦任何情节中存在风险 H对于一个 ID,我想将剩余行中的风险更改为 H,以便同一 ID 的任何先前剧集都应具有风险 H。数据已按 ID、剧集和日期排序。最终输出将是:
ID date episode risk
0 1 2015-01-21 111 L
1 1 2015-02-27 112 L
2 1 2015-03-19 113 H
3 1 2015-05-09 114 H
4 2 2015-01-03 115 H
5 2 2015-02-07 116 H
6 2 2015-05-11 117 H
我怎样才能做到这一点?
解决方案
用groupby
+检查cumprod
df['risk'].ne('H').groupby(df['ID']).cumprod().map({True:'L',False:'H'})
Out[265]:
0 L
1 L
2 H
3 H
4 H
5 H
6 H
Name: risk, dtype: object
#df['risk']= df['risk'].ne('H').groupby(df['ID']).cumprod().map({True:'L',False:'H'})
推荐阅读
- python - 如何从嵌套字典中查找列表组合
- go - gob.Register 名称未为另一个包中的接口注册
- android - Android 抱怨不同的 com.android.support 版本
- javascript - 如何限制我可以用jquery动态添加的表行数
- haskell - 七周内七种语言中的错字(?)(“作文”) - Haskell 部分
- excel-formula - Excel日期范围和计数中的条件格式
- reactjs - React 组件不会将更改的状态传递给子级
- python - 为什么我们必须在 Python 中的非守护进程上使用 join 方法
- php - PHP从多维数组构建字符串数组
- api - Shopify 产品 API(自定义字段)