質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

299閲覧

データフレーム内の fillterの取り扱い方がわかりません

yamato0565

総合スコア17

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/26 06:26

前提

データフレームに過去の合計売上を入るようにしたい

発生している問題・エラーメッセージ

過去のデータにfillterが掛けれていない

該当のソースコード

pythonここに言語名を入力
ソースコード

### 試したこと import pandas as pd df = pd.DataFrame({'data': [1022, 1020, 1018, 1017], 'shop': ['A', 'B', 'A', 'A'], 'profit': [20, 34, 10, 60]}) df['past'] =df.groupby('shop')['profit'].transform('sum') #過去の日付の元の合計がほしいが未来データが入ってしまう df.groupby('data').filter(lambda x: x['data'] < x['data']) #data で過去のにfilterをかけようしましたが上手く表現できませんでした df = pd.DataFrame({'data': [1022, 1020, 1018, 1017], 'shop': ['A', 'B', 'A', 'A'], 'profit': [20, 34, 10, 60], 'past': [70, 34, 60, 0]}) #実現したいこと pastにshop事の過去のprofitの合計をいれたい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

※ 「過去の日付の元の合計」なので、data == 1020 and shop == "B"" 行の past の値は 0 になります。

python

1df['past'] = df.groupby('shop', group_keys=False)\ 2 .apply(lambda x: x.sort_values('data')['profit'].cumsum() - x['profit']) 3 4print(df)
datashopprofitpast
1022A2070
1020B340
1018A1060
1017A600

今出した合計(sum)の所を平均にしたい場合

expanding() を使います。

python

1df['past'] = df.groupby('shop', group_keys=False)\ 2 .apply(lambda x: x.sort_values('data')['profit'].shift().expanding().mean())
datashopprofitpast
1022A2035
1020B34nan
1018A1060
1017A60nan

投稿2022/11/26 06:53

編集2022/11/26 07:29
melian

総合スコア19712

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamato0565

2022/11/26 07:19

ありがとうございます 上手くできました もし良かったらもう一点聞きたいのですが 今出した合計(sum)の所を 平均にしたい場合はどのようにすればよいでしょうか? 質問ばかりですいませんけど良かったらお願します
melian

2022/11/26 07:31 編集

回答に追記しました。過去データが無い行の平均値は NaN になります。何らかの値を入れたい場合は fillna() で埋めて下さい。
yamato0565

2022/11/26 12:05

ありがとうございます ものすごく助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問