Python - GroupByオブジェクトのためのローリング関数
2023-11-01 03:28:15
質問
時系列オブジェクト
grouped
という型の
<pandas.core.groupby.SeriesGroupBy object at 0x03F1A9F0>
.
grouped.sum()
は望ましい結果をもたらしますが、rolling_sum が
groupby
オブジェクトに適用することができません。にローリング関数を適用する方法はあるのでしょうか?
groupby
オブジェクトに適用する方法はありますか?例えば
x = range(0, 6)
id = ['a', 'a', 'a', 'b', 'b', 'b']
df = DataFrame(zip(id, x), columns = ['id', 'x'])
df.groupby('id').sum()
id x
a 3
b 12
しかし、こんなのが欲しい。
id x
0 a 0
1 a 1
2 a 3
3 b 3
4 b 7
5 b 12
どのように解決するのですか?
累積和
質問に直接答えるために、cumsumメソッドは目的の系列を生成するでしょう。
In [17]: df
Out[17]:
id x
0 a 0
1 a 1
2 a 2
3 b 3
4 b 4
5 b 5
In [18]: df.groupby('id').x.cumsum()
Out[18]:
0 0
1 1
2 3
3 3
4 7
5 12
Name: x, dtype: int64
グループごとのpandasローリング関数
より一般的には、以下のように任意のローリング関数を各グループに適用することができます(@kekert がコメントした新しい .rolling メソッドを使用します)。戻り値の型は、以前の(非推奨の)pd.rolling_*メソッドとは異なる、複数のインデックスを持つ系列であることに注意してください。
In [10]: df.groupby('id')['x'].rolling(2, min_periods=1).sum()
Out[10]:
id
a 0 0.00
1 1.00
2 3.00
b 3 3.00
4 7.00
5 9.00
Name: x, dtype: float64
グループごとのローリング関数を適用し、結果を元のデータフレームの順序で受け取るには、代わりにtransformを使用する必要があります。
In [16]: df.groupby('id')['x'].transform(lambda s: s.rolling(2, min_periods=1).sum())
Out[16]:
0 0
1 1
2 3
3 3
4 7
5 9
Name: x, dtype: int64
非推奨の方法
参考までに、今は非推奨のpandas.rolling_meanの挙動は以下の通りです。
In [16]: df.groupby('id')['x'].apply(pd.rolling_mean, 2, min_periods=1)
Out[16]:
0 0.0
1 0.5
2 1.5
3 3.0
4 3.5
5 4.5
関連
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】複数のgroupbyカラムに複数の関数を適用する
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] if 節の終了方法
-
[解決済み] Django filter queryset __in for *every* item in list