回答編集履歴

2 defでの関数定義を追記

y__sama

y__sama score 81

2017/11/10 08:42  投稿

pandasで書くならこんな感じですかね。
```python
import pandas as pd
# 行ごとのデータを受け取って、Trueの列だけのindexをリストに変換してjoinするlambda関数を定義
f = lambda series: ",".join(series.index[series==True].tolist())
# 入出力例
f(df.iloc[2])
# >'key1,key3'
# applyでaxis=1(行方向に演算)でfuncを適用する
# 結果をdfのkeys列に新規に挿入
df['keys'] = df.apply(f, axis = 1)
df
# >    product  key1  key2  key3      keys
# > 0 ProductA  True False False      key1
# > 1 ProductB False  True False      key2
# > 2 ProductC  True False  True key1,key3
```  
 
無理にlambdaを使わなくても普通の関数でもOKです。  
```python  
def func(series):  
   columnNames=series.index[series==True].tolist()  
   return ",".join(columnNames)  
 
df['keys'] = df.apply(func, axis = 1)  
```
1 Seriesが大文字はじまりになっており、クラスと誤解しやすいので小文字に修正

y__sama

y__sama score 81

2017/11/07 08:43  投稿

pandasで書くならこんな感じですかね。
```python
import pandas as pd
# 行ごとのデータを受け取って、Trueの列だけのindexをリストに変換してjoinするlambda関数を定義
f = lambda Series: ",".join(Series.index[Series==True].tolist())
f = lambda series: ",".join(series.index[series==True].tolist())
# 入出力例
f(df.iloc[2])
# >'key1,key3'
# applyでaxis=1(行方向に演算)でfuncを適用する
# 結果をdfのkeys列に新規に挿入
df['keys'] = df.apply(f, axis = 1)
df
# >    product  key1  key2  key3      keys
# > 0 ProductA  True False False      key1
# > 1 ProductB False  True False      key2
# > 2 ProductC  True False  True key1,key3
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る