Ce que je veux faire, c'est de fusionner des colonnes en fonction des valeurs dans une autre colonne
Il est mieux illustré avec un exemple simple:
J'ai un fichier de données avec 5 colonnes: Je veux obtenir le tableau suivant: p> où les colonnes sont remplies de valeurs de Team_1.x et Team_1.Y pour les lignes de joueurs avec nombre inférieur à 5 et valeurs de Team_2.x et Team_2.y pour des lignes de joueurs avec nombre plus grand que 5 p> p>
3 Réponses :
Ce n'est pas du tout une solution élégante, mais elle devrait fonctionner ...
for i in df.loc[:, 'player_num']: index = df.loc[df.loc[:, 'player_num'] == i].index[0] if i >= 5: df.loc[index, 'x'] = df.loc[index, 'team_2.x'] df.loc[index, 'y'] = df.loc[index, 'team_2.y'] else: df.loc[index, 'x'] = df.loc[index, 'team_1.x'] df.loc[index, 'y'] = df.loc[index, 'team_1.x']
En fait, j'ai plusieurs colonnes avec les préfixes "Team_1" et "Team_2", donc je cherche une solution plus générale. Si je ne le trouverai pas, je vais certainement utiliser cela. Merci !
Vous pouvez utiliser NP.LOù NUMPY POUR Ceci:
# Extract column names and remove prefix to get a list of x,y,z, etc. cols = [col.split('.')[1] for col in list(df) if 'team_' in col] # Loop over and create new column for each prefix (x, y, z, etc) for col in cols: col1 = 'team_1.' + col col2 = 'team_2.' + col df[col] = np.where(df['player_num']<5, df[col1], df[col2])
Pouvez-vous faire fonctionner cette solution automatiquement pour les colonnes avec les préfixes "Team_1" et "Team_2"?
Si je comprends bien .. Vous avez plusieurs colonnes comme Team_1.x, Team_1.y, Team_1.z, etc. et même pour Team_2?
Vous pouvez séparer le Dataframe en fonction des conditions suivies en concaténant les résultats
l = df.loc[df["player_num"].lt(5), ["team_1.x", "team_1.y"]].rename(columns={"team_1.x": "x", "team_1.y": "y"}) g = df.loc[df["player_num"].gt(5), ["team_2.x", "team_2.y"]].rename(columns={"team_2.x": "x", "team_2.y": "y"}) df_res = pd.concat([l, g]) print(df_res)