(.groupbyに置き換えること.where()を使用してパンダ)オブジェクト

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は、使用することができますcummaxgroupbyのように:

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=364833&siteId=1