jorijnsmit:
Рассмотрим dataframe, который содержит несколько групп целых чисел:
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())
который отлично работает для одной серии. Я могу даже группы в dataframe, и петли через каждые извлеченные серии:
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
Однако, как я теперь получить эти значения обратно в мой первоначальный dataframe?
Или есть лучший способ сделать это? Я не забочусь для использования .groupby
и не считаю цикл довольно решением либо ...
ben.t:
IIUC, вы можете использовать cummax
в , groupby
как:
d['val_max'] = d.groupby('label')['value'].cummax()
print (d)
label value val_max
0 a 1 1
1 a 2 2
2 a 3 3
3 a 2 3
4 b 7 7
5 b 1 7
6 b 8 8
7 b 9 9