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
4 Réponses :
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
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
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)
Vous pouvez également faire ceci:
for i in range(len(df)):
df.set_value(i,'Result',[df.columns[(df == 1).iloc[i]]])