PythonでCSVファイル内のデータ操作を行いたい

実現したいこと

CSVファイルのデータを下記の内容で処理させたい。

  • リスト同じ取引番号のデータごとで処理をさせたい。
  • 取引区分が0で1行のみの時は取引区分が2の行の明細1から明細3までを取引区分が0の明細1から明細3に張り付ける。
  • 同じ取引番号で取引区分が0が複数行あるときは取引区分2の行の入金金額から明細3までを取引区分が0の行に張り付ける。
  • 取引区分に21が入っている行は削除

CSVデータは下記の図のように処理をさせたいです。
イメージ説明

前提

Python(python-3.12.2)でCSVデータを処理するプログラムを作っています。
描いている結果が得られなくて詰まっています。
コードについてアドバイスをいただければと思います。
よろしくお願いいたします。

CSVファイルの中身です。
取引番号,取引トランザクション,取引区分,価格,入金金額,明細1,明細2,明細3
1,1,3,0,,,,
2,2,0,1000,,,,
2,3,2,0,,商品A,カテゴリA,10kg
3,4,0,1000,,,,
3,5,0,1000,,,,
3,6,0,1000,,,,
3,7,2,0,3000,商品B,カテゴリB,500kg
4,8,0,1000,,,,
4,9,0,1000,,,,
4,10,0,1000,,,,
4,11,0,1000,,,,
4,12,0,1000,,,,
4,13,2,0,5000,商品C,カテゴリC,90kg
5,14,0,1000,,,,
5,15,21,0,,,,
5,16,2,0,,,,

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

思い描く集計ができません。
イメージ説明

該当のソースコード

Python

1import pandas as pd 2 3df = pd.read_csv('datafile.csv', encoding='cp932')4 5df = df[(df['取引区分'] != 21) & (df['取引区分'] != 3)].reset_index(drop=True)6 7 8# 取引番号でグループ化する9for _, group in df.groupby('取引番号'):10 # グループ内の最後の行を取得11 last_row = group.iloc[-1]12# 明細1明細2明細3のコピー処理。逆順処理13for index in group.index[::-1]:14 15 next_col_index = df.columns.get_loc('明細3') + 116 if next_col_index < len(df.columns): # 'マルチ決済金額'の次の列が存在する場合17 next_col_name = df.columns[next_col_index]18 df.loc[index, '入金金額':next_col_name] = last_row['入金金額':'明細3']19 else: # 'マルチ決済金額'が最後の列の場合20 df.loc[index, '入金金額':] = last_row['入金金額':'明細3']21 22# 変更を加えたデータフレームを新しいCSVファイルとして保存23df.to_csv('updated_datafile.csv', index=False)

コメントを投稿

0 コメント