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

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

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

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

Q&A

解決済

2回答

960閲覧

Pandas.DataFrame 取り扱い方

yamato0565

総合スコア17

Python

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

0グッド

0クリップ

投稿2022/08/15 05:46

前提

データフレーム内のデータを抽出して追加していきたい

実現したいこと

df_2のデータフレームから店舗事に抽出して前の日付の売上を追加していきたい

イメージ説明

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

イメージ説明
エラーメッセージ

### 該当のソースコード ValueError Traceback (most recent call last) /usr/local/lib/python3.7/dist-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance) 384 try: --> 385 return self._range.index(new_key) 386 except ValueError as err: ValueError: 0 is not in range The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) 7 frames /usr/local/lib/python3.7/dist-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance) 385 return self._range.index(new_key) 386 except ValueError as err: --> 387 raise KeyError(key) from err 388 raise KeyError(key) 389 return super().get_loc(key, method=method, tolerance=tolerance) KeyError: 0 ```ここに言語名を入力 ソースコード

途中経過

途中まではデータは入っているのですがデータがない所でエラーが返されてしまっています
データがない所は無視して進めるようにしていきたいです

イメージ説明

補足

プログラミング初心者です
他に簡単にコードがあればぜひ教えてもらいたいです

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

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

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

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

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

meg_

2022/08/15 06:43 編集

・「店舗事」とは何でしょうか? ・質問者さんが作成されたコードのエラー発生行はどこでしょうか?(赤い波線が表示されている箇所ですか?) ・またコードは画像ではなくテキストが回答者にとって見やすいです。
yamato0565

2022/08/15 14:42

ありがとうございます 以後気を付けるようにしていきます
guest

回答2

0

処理対象のデータがあるかを確認してからdf_3.loc[0,('売上')]を実行すれば良いです。

Python

1for i in range(len(df_2)): 2 df_3 = df_2[df_2['店舗'] == df_2.loc[i,('店舗')]] 3 df_3 = df_3[df_3['日付'] < df_2.loc[i,('日付')]] 4 if len(df_3) > 0: 5 df_3 = df_3.sort_values(by='日付', ascending=False) 6 df_3 = df_3.reset_index() 7 df_2.loc[i,('前回売上')] = df_3.loc[0,('売上')] 8 9print(df_2) 10# 日付 店舗 売上 前回売上 11# 0 1003 A店 150 300 12# 1 1005 A店 200 150 13# 2 924 A店 300 0 14# 3 1001 B店 400 900 15# 4 1000 B店 900 0

投稿2022/08/15 06:49

meg_

総合スコア10580

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

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

yamato0565

2022/08/15 14:48

ありがとうございます if文をそこに入れるんですね 参考になりました
guest

0

ベストアンサー

python

1import pandas as pd 2import io 3 4pd.set_option('display.unicode.east_asian_width', True) 5 6csv_data = ''' 7日付,店舗,売上 81003,A店,150 91005,A店,200 10924,A店,300 111001,B店,400 121000,B店,900 13''' 14df_2 = pd.read_csv(io.StringIO(csv_data)) 15 16# 17df_2['前回売上']= df_2.sort_values(['店舗', '日付'])\ 18 .groupby('店舗')['売上'].shift(fill_value=0) 19 20print(df_2)
日付店舗売上前回売上
1003A店150300
1005A店200150
924A店3000
1001B店400900
1000B店9000

投稿2022/08/15 09:12

melian

総合スコア19798

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

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

yamato0565

2022/08/15 14:47

ありがとうございます こんなに簡潔なコードでできるんですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問