jorijnsmit:
整数のいくつかのグループが含まれているデータフレームを考えてみましょう。
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
整数のこれらの群のそれぞれについて、各整数より大きい又は前1に等しくなければなりません。そうでない場合は、前回の整数の値をとります。私が使用して置き換えます
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
し、どちらかのループのためにかなりのソリューションを考慮していません...
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