Pandasを勉強中の者です。
以下、初歩的な内容と思いますが、ご教授願います。
実現したいこと
対象となる基データ
| 日時 | 果物 | 値段 | 個数 |
|---|---|---|---|
| 2024/06/11 18:00:00 | バナナ | 150 | 100 |
| 2024/06/11 18:00:00 | バナナ | 150 | NaN |
| 2024/06/11 18:10:10 | りんご | 200 | 150 |
| 2024/06/11 18:10:10 | りんご | 200 | NaN |
| 2024/06/11 18:30:30 | りんご | 100 | 300 |
| 2024/06/11 18:30:30 | りんご | 100 | NaN |
| 2024/06/11 18:40:40 | すいか | 500 | NaN |
| 2024/06/11 18:50:50 | ぶどう | 600 | 50 |
| 2024/06/11 18:50:50 | ぶどう | 600 | NaN |
期待するデータ
| 日時 | 果物 | 値段 | 個数 |
|---|---|---|---|
| 2024/06/11 18:00:00 | バナナ | 150 | 100 |
| 2024/06/11 18:00:00 | バナナ | 150 | 100 |
| 2024/06/11 18:10:10 | りんご | 200 | 150 |
| 2024/06/11 18:10:10 | りんご | 200 | 150 |
| 2024/06/11 18:30:30 | りんご | 100 | 300 |
| 2024/06/11 18:30:30 | りんご | 100 | 300 |
| 2024/06/11 18:40:40 | すいか | 500 | NaN |
| 2024/06/11 18:50:50 | ぶどう | 600 | 50 |
| 2024/06/11 18:50:50 | ぶどう | 600 | 50 |
上の行と下の行の日時・果物・値段の値を比較して、完全一致確認できたら、下行のNaNを上行の値を取得して置換したい。
for文を使って、ループ処理しながら上の行と下の行を確認して置換する方法もあるが、最大行となると出力に時間がかかるため避けたい。
該当のソースコード
python
1import pandas as pd 2import io 3 4csv_data = ''' 5日時,果物,値段,個数 62024/06/11 18:00:00,バナナ,150,100 72024/06/11 18:00:00,バナナ,150, 82024/06/11 18:10:10,りんご,200,150 92024/06/11 18:10:10,りんご,200, 102024/06/11 18:30:30,りんご,100,300 112024/06/11 18:30:30,りんご,100, 122024/06/11 18:40:40,すいか,500, 132024/06/11 18:50:50,ぶどう,600,50 142024/06/11 18:50:50,ぶどう,600, 15'''16 17df = pd.read_csv(io.StringIO(csv_data), dtype=str)18df['日時'] = pd.to_datetime(df['日時'])19 20datetime_match = df['日時'] != df['日時'].shift(-1)21fruits_match = df['果物'] != df['果物'].shift(-1)22price_match = df['値段'] != df['値段'].shift(-1)23 24df['個数'] = df['個数'].mask(datetime_match & fruits_match & price_match, df['個数'].shift(1))25 26print(df)
試したこと
24行目のshift関数つかって色々試みましたが、期待するデータのように出力しません。
上記コードから出力結果
| 日時 | 果物 | 値段 | 個数 |
|---|---|---|---|
| 2024-06-11 18:00:00 | バナナ | 150 | 100 |
| 2024-06-11 18:00:00 | バナナ | 150 | 100 |
| 2024-06-11 18:10:10 | りんご | 200 | 150 |
| 2024-06-11 18:10:10 | りんご | 200 | NaN |
| 2024-06-11 18:30:30 | りんご | 100 | 300 |
| 2024-06-11 18:30:30 | りんご | 100 | 300 |
| 2024-06-11 18:40:40 | すいか | 500 | NaN |
| 2024-06-11 18:50:50 | ぶどう | 600 | 50 |
| 2024-06-11 18:50:50 | ぶどう | 600 | 50 |

0 コメント