панды с помощью .гда (), чтобы заменить в .groupby () объект

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

рекомендация

отhttp://43.154.161.224:23101/article/api/json?id=364845&siteId=1