gpt4 book ai didi

python - 如何在 DataFrame 中创建和使用新函数?

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

如何创建新函数并在 DataFrame 中使用这个新函数,以便在聚合期间添加新列?从我的数据框中,我获取了“风向”和“温度”,对于这些列,我想将其聚合并创建表,其中包含“风向”的平均值以及所有城市的值与平均值“aa”之间的差值,对于“温度”。然而,在我使用函数“aa”的列中,我有 0。问题出在哪里,你能给我写适当的代码行吗?

def aa(x):
return x - np.mean(x)

file.groupby(["City"]).agg({"Wind direction":[np.mean, aa], "Temperature":["mean", aa]})

最佳答案

您在错误的分组级别上应用了aa。这是一个简单的例子:

np.random.seed(1)
size = 10
file = pd.DataFrame({
'City': np.random.choice(list(string.ascii_uppercase), size),
'Wind direction': np.random.randint(0, 360, size),
'Temperature': np.random.randint(1, 100, size)
}).sort_values('City').reset_index(drop=True)

df:

  City  Wind direction  Temperature
0 A 252 87
1 F 129 30
2 F 254 95
3 I 281 69
4 J 178 88
5 L 71 15
6 L 276 88
7 M 237 51
8 P 357 97
9 Q 156 14

您的原始代码...

def aa(x):
return x - np.mean(x)

file.groupby(["City"]).agg({"Wind direction":[np.mean, aa], "Temperature":["mean", aa]})

..产生:

     Wind direction                  Temperature               
mean aa mean aa
City
A 252.0 0 87.0 0
F 191.5 [-62.5, 62.5] 62.5 [-32.5, 32.5]
I 281.0 0 69.0 0
J 178.0 0 88.0 0
L 173.5 [-102.5, 102.5] 51.5 [-36.5, 36.5]
M 237.0 0 51.0 0
P 357.0 0 97.0 0
Q 156.0 0 14.0 0

请注意,为什么只有出现两次的城市才有结果表中的值?当该城市只有 1 个数据点时,x == np.mean(x) 因此它们的差异为 0。

<小时/>

解决方案

将聚合函数定义为:

def aa(col):
# Difference between the local (city) mean and the global (entire column) mean
return col.mean() - file[col.name].mean()

file.groupby(["City"]).agg({"Wind direction":[np.mean, aa], "Temperature":["mean", aa]})

结果:

     Wind direction        Temperature      
mean aa mean aa
City
A 252.0 32.9 87.0 23.6
F 191.5 -27.6 62.5 -0.9
I 281.0 61.9 69.0 5.6
J 178.0 -41.1 88.0 24.6
L 173.5 -45.6 51.5 -11.9
M 237.0 17.9 51.0 -12.4
P 357.0 137.9 97.0 33.6
Q 156.0 -63.1 14.0 -49.4

关于python - 如何在 DataFrame 中创建和使用新函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476401/

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