2
votes

afficher les noms des colonnes si la ligne est égale à la valeur en python

Comment puis-je itérer entre les lignes et imprimer les noms de colonnes dans une colonne si la valeur = 1

mydata = [{'a' : '0', 'b': 1, 'c': 0}, {'a' : 1, 'b': 0, 'c':1}, {'a' : '0', 'b': 1, 'c':1}] 
df = pd.DataFrame(mydata)

a   b   c   Result 
0   1   0   b 
1   0   1   a , c
0   1   1   b , c

Le résultat n'affiche que les noms de colonnes qui sont égaux à 1


0 commentaires

4 Réponses :


6
votes

Utilisation de dot

df['New']=df.astype(int).dot(df.columns+',').str[:-1]
df
Out[44]: 
   a  b  c  New
0  0  1  0    b
1  1  0  1  a,c
2  0  1  1  b,c


0 commentaires

1
votes

Utilisez l'indexation booléenne pour indexer la ligne et joindre les noms de colonne

df['new'] = df.eq(1).apply(lambda x: ', '.join(x[x].index), axis = 1)

    a   b   c   new
0   0   1   0   b
1   1   0   1   a, c
2   0   1   1   b, c


0 commentaires

0
votes

D'autres solutions pour débutants seraient

for index, row in df.iterrows():
    for key in row.keys():
        print(key if row.get(key) == 1 else None)


0 commentaires

1
votes

Vous pouvez également faire ceci:

for i in range(len(df)):
    df.set_value(i,'Result',[df.columns[(df == 1).iloc[i]]])


0 commentaires