Как создать новый столбец, содержащий конкатенацию имени столбца, если значение ячейки равно True - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть DataFrame, который определяется как:

import pandas as pd

df = pd.DataFrame({'product': ['A', 'B', 'C'], 'feature_1': [1,0,0], 'feature_2': [1,1,1], 'feature_3': [0,0,1] })

imagedisplay(df)">

Моя цель:

  • добавить столбец с именем features
  • , заполните этот столбец именем всех столбцов, где значение ячейка равно единице

Обычноконечный результат будет выглядеть как DataFrame:

df_result = pd.DataFrame({'product': ['A', 'B', 'C'], 'feature_1': [1,0,0], 'feature_2': [1,1,1], 'feature_3': [0,0,1], 'features': ['feature_1, feature_2', 'feature_2', 'feature_2, feature_3'] })

imagedisplay(df_result)">

Я пытался использовать apply, но я не думаю, что этоправильный способ делать вещи (поверх не работает ...):

def get_features(row):
    for column in row.colums:
        print(column.name)

df.apply(lambda row: get_features(row))

Каков будет правильный подход к этому?

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019

Мы можем использовать dot

s=df.filter(like='feature')
df['New']=s.dot(s.columns+',').str[:-1]
df
Out[146]: 
  product  feature_1  feature_2  feature_3                  New
0       A          1          1          0  feature_1,feature_2
1       B          0          1          0            feature_2
2       C          0          1          1  feature_2,feature_3
2 голосов
/ 30 сентября 2019

Вы можете сделать melt, затем groupby:

s = df.melt(id_vars='product')
s[s.value.eq(1)].groupby('product').variable.agg(', '.join)

Output:

product
A    feature_1, feature_2
B               feature_2
C    feature_2, feature_3
Name: variable, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...