DataFrame中满足条件时获取上一行值的实现问题
问题与解决方案
问题说明
给定如下DataFrame:
| ColumnX |
|---|
| Hi |
| + Open |
| How are you |
| NAN |
| Something |
| something |
| HEY |
| + Open |
需要找出所有值为+ Open的行的上一行值,存入列表。当前代码只能把+ Open本身加入列表,无法获取上一行内容:
ilist=[] for i in df["ColumnX"]: if i == '+ Open': ilist.append(i)
解决方法
方法一:索引遍历法
直接遍历行索引,通过索引减1定位上一行,注意排除第一行的情况(避免索引越界):
ilist = [] for idx, val in df["ColumnX"].items(): if val == '+ Open': if idx > 0: prev_val = df["ColumnX"].iloc[idx - 1] ilist.append(prev_val)
方法二:pandas shift函数法(更简洁)
用shift(1)把列向下偏移一行,此时原列为+ Open的位置,偏移列的值就是上一行的内容,最后筛选转成列表即可:
shifted_col = df["ColumnX"].shift(1) ilist = shifted_col[df["ColumnX"] == '+ Open'].dropna().tolist()
两种方法最终得到的ilist结果都是:['Hi', 'HEY']
内容的提问来源于stack exchange,提问作者Maha Mohammed
相关产品推荐
相关产品推荐

