2
votes

fusionner la valeur de plusieurs colonnes d'un dataframe en une seule colonne avec un crochet au milieu

J'ai un dataframe.

category     value    percentage_difference merge_value
Cosmetics    789.99   300.0                 Cosmetic(789.99, 300%)
Fruits       27.68    400.0                 Fruits(27.68, 400%)
Clothes      179.20   500.0                 Clothes(179.20, 500%

Je veux ajouter une quatrième colonne pour que sa valeur soit category (valeur, pourcentage)

category     value    percentage_difference
Cosmetics    789.99   300.0
Fruits       27.68    400.0
Clothes      179.20   500.0

Avec la boucle for que je peux faire, y a-t-il une autre méthode efficace sans boucle for?


0 commentaires

3 Réponses :


4
votes
df = pd.DataFrame( { 'category': ['Cosmetics', 'Fruits', 'Clothes'],
                     'value': [789.99,27.68, 179.20],
                    'percentage_difference': [300.0,400.0,500.0]})
df['merge_value'] = df.apply(lambda r: "{0}({1}, {2}%)".format(r['category'], r['value'], r['percentage_difference']), axis=1)

0 commentaires

5
votes

Une autre approche utilisant une compréhension de liste:

    category   value  percentage_difference              merge_value
0  Cosmetics  789.99                  300.0  Cosmetics(789.99, 300%)
1     Fruits   27.68                  400.0      Fruits(27.68, 400%)
2    Clothes  179.20                  500.0     Clothes(179.2, 500%)

[out]

df['merge_value'] = ['{}({}, {:0}%)'.format(x, y, int(z)) for x, y, z in
                     df[['category', 'value', 'percentage_difference']].values]


0 commentaires

5
votes

Une autre approche consiste simplement à ajouter la colonne sous forme de chaînes:

    category   value  percentage_difference             merge_value
0  Cosmetics  789.99                    300  Cosmetics(789.99,300%)
1     Fruits   27.68                    400      Fruits(27.68,400%)
2    Clothes  179.20                    500     Clothes(179.2,500%)

df=df.assign(merge_value=
      df.category+"("+df.value.astype(str)+','+df.percentage_difference.astype(str)+"%)")
print(df)


0 commentaires