Python pandas CSV のデータ加工につきまして、
お店の仕入れデータで下の【元データ】のようなものCSVがあるのですが
別のソフトに読み込ますときに【最終】の形にしないといけなくて
今はエクセルで手動で置換&行削除していますがミスがあったりするので
できれば自動化したいと思っています。
【元データ】
A B C D E
本 店 りんご
本 店 バナナ
本 店 みかん
本 店 いちご
芦屋店 バナナ
西宮店 りんご
西宮店 バナナ
尼崎店 りんご
三宮店 りんご
三宮店 バナナ
三宮店 みかん
【途中】
A B C D E
本 店 りんご バナナ みかん いちご
本 店 バナナ
本 店 みかん
本 店 いちご
芦屋店 バナナ
西宮店 りんご バナナ
西宮店 バナナ
尼崎店 りんご
三宮店 りんご バナナ みかん
三宮店 バナナ
三宮店 みかん
【最終】
A B C D E
本 店 りんご バナナ みかん いちご
芦屋店 バナナ
西宮店 りんご バナナ
三宮店 りんご バナナ みかん
と、店名(A列)と商品(B列)が商品(B列)で縦に羅列されたものを
と、店名(A列)と商品(B列)を横に並べるようにしたいのですが、
順序が逆ですが【途中】→【最終】は
df1 = df.drop_duplicates(subset=['A'], keep='first') で、自力で出来たのですが
肝心の【元データ】→【途中】で困っています。
頭の中では、
① A列上から順に上下の行を比較して同じだった(重複)場合、
② 比較した下側の隣のB列同行を指定した文字列を抽出し、
③ 一つ上のC列(比較上側のC列)に②の値を追加
④ 但し、その一つ上のC列(比較上側のC列)が空白(NaN)でない場合はさらに横の比較上側のD列)に追加
⑤ そのD列(比較上側のD列)も空白(NaN)でない場合はさらに横の比較上側のE列)に追加
かなと考えております。
【現状】
del_list = []
for i in range(len(df)):
bf = i-1, 1
af = i, 1
add = df.iloc[i, 2]
if df.iat[bf] == df1.iat[af]:
df.iloc[i-1, 3] = add
del_list.append(i)
df.drop(del_list, inplace=True, errors='ignore')
print(df)
で、何とか①~③は出来たっぽいのですが
④⑤の記述がよくわかりません。
del_list = []
for i in range(len(df)):
bf = i-1, 1
af = i, 1
add = df.iloc[i, 2]
if df.iat[bf] == df.iat[af] and df1iloc[i-1, 3] == np.nan:
df.iloc[i-1, 3] = add
de_list.append(i)
df.drop(del_list, inplace=True, errors='ignore')
print(df)
だとSyntaxError: invalid syntaxになってしまい。
np.nan(NaN)が原因なのか and が原因なのかもわからない状態です。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/07 22:29 編集
退会済みユーザー
2021/05/07 23:36 編集
2021/05/08 07:46