Madh
Madh

Reputation: 21

List column name having value greater than zero

I have following dataframe

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

I want to add the new column have any value of row in the column greater than zero along with column name

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

Upvotes: 0

Views: 954

Answers (2)

Michael Gardner
Michael Gardner

Reputation: 1803

Combine the column names with the df values that are not zero and then filter out the None values.

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]

Upvotes: 1

BENY
BENY

Reputation: 323236

We can use mask and 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

Upvotes: 2

Related Questions