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

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

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

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

解決済

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

yamato0565
yamato0565

総合スコア6

Python

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

1回答

0グッド

0クリップ

139閲覧

投稿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の合計をいれたい

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答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

総合スコア16208

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

yamato0565

2022/11/26 07:19

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

2022/11/26 07:31 編集

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

2022/11/26 12:05

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

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