前提・実現したいこと
統計集計のためダミー変数からカテゴリ変数に変換したいのですが
Iの行のように値が2箇所に入っている場合はNaNにしたいのですがうまくいきません。
2箇所以上に値が入っている場合はNaNにする方法を教えてください。
よろしくお願いいたします。
ダミー変数
name | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|
A | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
B | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
C | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
D | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
E | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
F | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
G | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
H | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
I | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
変換して
カテゴリ変数
name | variable |
---|---|
A | 6 |
B | 7 |
C | 8 |
D | 9 |
E | 10 |
F | 11 |
G | 12 |
H | NaN |
I | NaN |
発生している問題・エラーメッセージ
下記ソースではうまくいかないため結合してます
name | variable |
---|---|
A | 6 |
B | 7 |
C | 8 |
D | 9 |
E | 10 |
F | 11 |
G | 12 |
H | NaN |
I | 8,10 |
該当のソースコード
python
1import io 2import pandas as pd 3import numpy as np 4 5data = """\ 6name,6,7,8,9,10,11,12 7A,1,0,0,0,0,0,0 8B,0,1,0,0,0,0,0 9C,0,0,1,0,0,0,0 10D,0,0,0,1,0,0,0 11E,0,0,0,0,1,0,0 12F,0,0,0,0,0,1,0 13G,0,0,0,0,0,0,1 14H,0,0,0,0,0,0,0 15I,0,0,1,0,1,0,0 16""" 17 18df = pd.read_csv(io.StringIO(data)) 19 20# 集計 21df["sum"] = df.loc[:,"6":"12"].sum(axis=1) 22 23# 集計して0ところをnan列を作成し1にする 24df.loc[(df["sum"] == 0), "nan"] = 1 25 26df1 = pd.melt(df, id_vars=["name"], value_vars=["6","7","8","9","10","11","12","nan"]) 27 28df2 = df1[df1["value"] == 1] 29 30df3 = df2.pivot_table(index="name", values="variable", aggfunc=lambda x: ",".join(str(v) for v in x)) 31 32df3.mask(df3["variable"] == "nan")
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/17 12:05