我想知道从以下 DataFrame 中的价格中减去特定于品牌的平均价格的最优雅/Pythonic 方法是什么。
换句话来说,我想创建第二列,对于 Apple 产品,它等于原价减去 1200;对于联想产品,我想创建第二列,等于原价减去 700。
import pandas as pd
from io import StringIO
csv = StringIO('''product,brand,price
macbook,Apple,1000
macbook air,Apple,1200
macbook pro,Apple,1400
thinkbook,Lenovo,600
thinkpad,Lenovo,800
''')
df = pd.read_csv(csv)
预先感谢您的帮助!
最佳答案
您可以从价格中减去按平均值分组的值,以创建一个名为 Price_Diff_Mean
的新列。使用 .transform('mean')
创建一系列与 price
列长度相同的值,并从 price
中减去这些值:
df['Price_Diff_Mean'] = df['price'] - df.groupby('brand')['price'].transform('mean')
df
Out[6]:
product brand price Price_Diff_Mean
0 macbook Apple 1000 -200
1 macbook air Apple 1200 0
2 macbook pro Apple 1400 200
3 thinkbook Lenovo 600 -100
4 thinkpad Lenovo 800 100
或者,您可以使用 .assign
添加一列,这将给您相同的结果:
df = df.assign(Price_Diff_Mean = df['price'] - df.groupby('brand')['price'].transform('mean'))
关于python - Pandas DataFrame 上的特定组计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63368235/