Bonjour,
j'ai un dataframe df qui contient plusieurs colonnes et lignes. Parmi les colonnes, il y a crit1 et crit2 qui peuvent prendre plusieurs valeurs numériques puis d'autres colonnes nommées a1, a2, a3, a4, ..., a23.
J'aimerais créer un nouveau dataframe en concaténant verticalement les colonnes a1, a2, ..., a23 avec un filtre sur crit1 et crit2 de manière à obtenir un dataframe avec une seule colonne.
J'ai trouvé une méthode mais elle est un peu bourrin.Le but de ma question est de savoir s'il n'y a pas mieux à faire!!
Voici la méthode bourrin:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
new_df=pd.concat([
df[(df.crit1==value1) & (df.crit2==value2) ].a1,
df[(df.crit1==value1) & (df.crit2==value2) ].a2,
df[(df.crit1==value1) & (df.crit2==value2) ].a3,
df[(df.crit1==value1) & (df.crit2==value2) ].a4,
df[(df.crit1==value1) & (df.crit2==value2) ].a5,
df[(df.crit1==value1) & (df.crit2==value2) ].a6,
df[(df.crit1==value1) & (df.crit2==value2) ].a7,
df[(df.crit1==value1) & (df.crit2==value2) ].a8
df[(df.crit1==value1) & (df.crit2==value2) ].a9,
df[(df.crit1==value1) & (df.crit2==value2) ].a10,
df[(df.crit1==value1) & (df.crit2==value2) ].a11,
df[(df.crit1==value1) & (df.crit2==value2) ].a12,
df[(df.crit1==value1) & (df.crit2==value2) ].a13,
df[(df.crit1==value1) & (df.crit2==value2) ].a14,
df[(df.crit1==value1) & (df.crit2==value2) ].a15,
df[(df.crit1==value1) & (df.crit2==value2) ].a16,
df[(df.crit1==value1) & (df.crit2==value2) ].a17,
df[(df.crit1==value1) & (df.crit2==value2) ].a18,
df[(df.crit1==value1) & (df.crit2==value2) ].a19,axis=0)
et une idée qui n'a pas fonctionné:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
new_df=pd.concat(df[(df.crit1==value1) & (df.crit2==value2)].iloc[:,2:20],axis=0)
qui renvoie cette erreur:first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"

Merci pour votre aide