python - Pandas DataFrame 上的特定组计算

标签 python pandas pandas-groupby

我想知道从以下 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/

相关文章:

python - 数据框使列代表向量

python - Pandas 使用前一行中的信息填写每组中缺失的日期

python - 在Python中使用groupby划分两个数据框

python - 在 pd DataFrame 中为每个组创建相对值

python - 将全彩色图像转换为三色图像以用于电子墨水显示

javascript - 将时间值从 jquery 发送到 python 服务器

python - 如何将在不同进程中完成的 SQLite 数据库更改通知进程?

python - Python 中数据帧列上的多个 IF 条件

python - 值错误 : cannot reindex from a duplicate axis using isin with pandas

python - Pandas - 从分类列创建 bool 列