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?
3 Réponses :
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)
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]
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)