###前提・実現したいこと
以下のようなブーリアン型の表があるときに、Trueの値がある列のラベルを取り出してまとめたいです。
処理前の表
|product|key1|key2|key3|
|:--|:--:|--:|
|ProductA|True|False|False|
|ProductB|False|Ture|False|
|ProductC|True|False|True|
処理後の表
|product|key1|key2|key3|keys|
|:--|:--:|--:|--:|
|ProductA|True|False|False|key1|
|ProductB|False|Ture|False|key2|
|ProductC|True|False|True|key1,key3|
###発生している問題・エラーメッセージ
以下のようなfor文を使ったコードで目的にあったリストを作ることができたのですが、大きなデータフレーム(400列、15万行)に適用すると実行に数時間かかってしまいます。もっと短時間で実行できるような書き方はできないでしょうか?
###該当のソースコード
Python
1import pandas as pd 2import numpy as np 3 4df = pd.DataFrame([ 5 ["ProductA", True, False, False], 6 ["ProductB", False, True, False], 7 ["ProductC", True, False, True]], 8 columns=['product', 'key1', 'key2', 'key3']) 9 10keys = [] 11for col in range(0,len(df.index)): 12 key = [] 13 for row in range(1,len(df.columns)): 14 if df.iloc[[col],[row]].values: 15 key.append(df.columns[row]) 16 keys.append(key) 17keys
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/07 14:10