考虑一个包含几组整数的数据框:
d = pd.DataFrame({'label': ['a','a','a','a','b','b','b','b'], 'value': [1,2,3,2,7,1,8,9]})
d
label value
0 a 1
1 a 2
2 a 3
3 a 2
4 b 7
5 b 1
6 b 8
7 b 9
对于这些整数组中的每一个,每个整数必须大于或等于前一个整数。如果不是这种情况,它将采用前一个整数的值。我用
代替 s.where(~(s < s.shift()), s.shift())
适用于单个系列。我什至可以对数据框进行分组,并遍历每个提取的序列:
grouped = s.groupby('label')['value']
for _, s in grouped:
print(s.where(~(s < s.shift()), s.shift()))
0 1.0
1 2.0
2 3.0
3 3.0
Name: value, dtype: float64
4 7.0
5 7.0
6 8.0
7 9.0
Name: value, dtype: float64
但是,现在如何将这些值恢复到原始数据框中?
或者,还有更好的方法吗?我不在乎使用.groupby
,也不认为for循环是一个不错的解决方案...