50×100のpandas.DataFrameがあるとします。各行に対して、dictのkeyをその行に現れる1のコラム名と置き換えていくという処理を行いたいのです。
python
1for i in range(50): 2 info={} 3 (なおinfoは各行に固有のdictであり、取得過程は省きますが、取得したものとします) 4 for key in info.keys(): 5 この行の要素のうち1である要素のコラム名をkeyで置き換えます。 6 なお、1番目のkeyは最初に現れた1のコラム名に対応し、 7 2番目のkeyは左から2番目に現れる1のコラム名に対応します。 8 この処理をすべてのkeyについて行います。 9 各行について、keyの数と、現れる1の数は一致しています。
自分で書いたループ内の処理は以下です。
python
1 for identifier in info.keys(): 2 count=0 3 for j in range(100-count): 4 if df.loc[i, j+count]==1: 5 df.rename(columns={df.columns[j]:identifier}, inplace=True) 6 count+=1 7 continue
以下、例を示します。
<前>
|1|2|3|4|5
|:--|:--:|--:|
|0|1|0|1|0
|1|0|0|1|0
0|0|1|0|0
|0|1|0|0|1
(ここで、各行に対してdictが与えられており、
python
1dict(row1)={key1:..., keys2:...} 2dict(row2)={key3:..., key2:...} 3dict(row3)={key4:...} 4dict(row4)={key1:..., key5:...}
なお、valueは関係しないので省略しています。
ある行が持つdictのkeyの数は、その行の1の数と一致しており、現れる順序も一致しています。
一旦コラム名の書き換えが起これば、それ以上は書き換えをする必要がありません。書き換えてもいいですが、同じコラム名に対応するdictのkeyは同じなので意味がありません。
<後>
|key3|key1|key4|key2|key5
|:--|:--:|--:|
|0|1|0|1|0
|1|0|0|1|0
0|0|1|0|0
|0|1|0|0|1
回答1件
あなたの回答
tips
プレビュー