Имя столбца списка, значение которого больше нуля - PullRequest
0 голосов
/ 12 ноября 2019

У меня следующий фрейм данных

A |  B  | C  | D
1    0    2    1
0    1    1    0
0    0    0    1

Я хочу добавить в новый столбец любое значение строки в столбце больше нуля вместе с именем столбца

A |  B  | C  | D  | New
1    0    2    1    A-1, C-2, D-1
0    1    1    0    B-1, C-1
0    0    0    1    D-1

Ответы [ 2 ]

2 голосов
/ 12 ноября 2019

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

s=df.mask(df==0).stack().\
     astype(int).astype(str).\
       reset_index(level=1).apply('-'.join,1).add(',').sum(level=0).str[:-1]
df['New']=s
df
Out[170]: 
   A  B  C  D          New
0  1  0  2  1  A-1,C-2,D-1
1  0  1  1  0      B-1,C-1
2  0  0  0  1          D-1
0 голосов
/ 12 ноября 2019

Объедините имена столбцов со значениями df, которые не равны нулю, а затем отфильтруйте значения None.

df = pd.read_clipboard()

arrays = np.where(df!=0, df.columns.values + '-' +  df.values.astype('str'), None)

new = []
for array in arrays: 
    new.append(list(filter(None, array)))

df['New'] = new

df
Out[1]: 
   A  B  C  D              New
0  1  0  2  1  [A-1, C-2, D-1]
1  0  1  1  0       [B-1, C-1]
2  0  0  0  1            [D-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...