-1
votes

Python Dataframe Fusion de colonnes selon d'autres valeurs de colonne

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: xxx

Je veux obtenir le tableau suivant: xxx

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


0 commentaires

3 Réponses :


0
votes

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']


1 commentaires

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 !



2
votes

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])


2 commentaires

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?



1
votes

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)


0 commentaires