gpt4 book ai didi

python - 从列中获取低值、高值和平均值

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:05 25 4
gpt4 key购买 nike

我正在尝试从列中获取低值、高值和平均值。但是,我只想按列值进行聚合。例如,如果我们有 2 行具有相同的列值,那么我们将这两行聚合在一起。此外,它们必须属于同一运营商。像这样:

处理前:

carrier   class   price
SP A 22
VZ C 33
XM A 50
XM D 20
SP A 88
VZ C 100

处理后:

carrier   class   price   low   high   mean
SP A 22 22 88 55
VZ C 33 33 100 66.5
XM A 50 50 50 50
XM D 20 20 20 20
SP A 88 22 88 55
VZ C 100 33 100 66.5

如您所见,如果我们有相同的运营商和相同的类别,那么我们就会聚合并获得低、高和平均值。如果我们有相同的运营商,但没有相同的类别,那么我们不会聚合,但我们仍然会得到与类别价格相同的低、高、均值。

我希望结果与处理后的结果完全一样。结果应该是一个数据框。我怎样才能做到这一点?

最佳答案

使用DataFrameGroupBy.agg带有元组列表 foe 具有聚合函数和 join 的新列名称到原始 DataFrame:

d = [('low','min'),('high','max'),('mean','mean')]
df1 = df.join(df.groupby(['carrier','class'])['price'].agg(d), on=['carrier','class'])
print (df1)
carrier class price low high mean
0 SP A 22 22 88 55.0
1 VZ C 33 33 100 66.5
2 XM A 50 50 50 50.0
3 XM D 20 20 20 20.0
4 SP A 88 22 88 55.0
5 VZ C 100 33 100 66.5

详细信息:

print (df.groupby(['carrier','class'])['price'].agg(d))
low high mean
carrier class
SP A 22 88 55.0
VZ C 33 100 66.5
XM A 50 50 50.0
D 20 20 20.0

或者使用transform , 有趣的解决方案:

d = [('low','min'),('high','max'),('mean','mean')]
g = df.groupby(['carrier','class'])['price']
for i, j in d:
df[i] = g.transform(j)
print (df)
carrier class price low high mean
0 SP A 22 22 88 55.0
1 VZ C 33 33 100 66.5
2 XM A 50 50 50 50.0
3 XM D 20 20 20 20.0
4 SP A 88 22 88 55.0
5 VZ C 100 33 100 66.5

关于python - 从列中获取低值、高值和平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53048513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com