gpt4 book ai didi

python - Pandas 数据帧 : mean of column B values within column A windows

转载 作者:行者123 更新时间:2023-12-01 01:04:36 25 4
gpt4 key购买 nike

如果我有一个 Python 中的 pandas DataFrame,如下所示:

import numpy as np
import pandas as pd

a = np.random.uniform(0,10,20)
b = np.random.uniform(0,1,20)
data = np.vstack([a,b]).T

df = pd.DataFrame(data)
df.columns = ['A','B']
df.sort_values(by=['A'])

A B
5 0.057519 0.465408
14 1.610972 0.398077
3 1.725556 0.397708
17 1.734124 0.600723
11 1.944105 0.694152
19 3.265799 0.878538
13 3.352460 0.770505
10 3.865299 0.064723
16 4.137863 0.659662
12 5.597172 0.122269
7 5.990105 0.667533
6 6.410582 0.193027
9 6.881429 0.041691
15 7.522877 0.268144
1 8.093155 0.130559
0 8.699004 0.996624
8 8.755095 0.495984
4 9.135271 0.792966
18 9.440045 0.477514
2 9.654226 0.509812

是否可以有效计算 A 列间隔内 B 列值的平均值?

例如,人们可能想要计算 B 列中属于 bin 范围 [0,1,2,3,4,5,6,7, A 列的 8,9,10]。因此,对于 bin 范围 A = {0-1},落在该 bin 内的 B 值的平均值将为 0.465408,对于 bin 范围A = {1-2} 落入此 bin 内的 B 值的平均值将为 0.522665,依此类推。

我找到了 pandas.core.window.Rolling.mean (请参阅 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.window.Rolling.mean.html ),但它似乎计算指定长度窗口上的平均值,而不是另一个窗口宽度上的平均值柱子。

最佳答案

使用 cutA 列分段为 bin,然后对这些分段应用 groupby 并计算平均值 B 的值:

df.groupby(pd.cut(df['A'], bins=np.arange(11)))['B'].mean()

输出:

A
(0, 1] 0.465408
(1, 2] 0.522665
(2, 3] NaN
(3, 4] 0.571255
(4, 5] 0.659662
(5, 6] 0.394901
(6, 7] 0.117359
(7, 8] 0.268144
(8, 9] 0.541056
(9, 10] 0.593431

更新:您可以使用 agg 来应用一组不同的聚合函数,例如 meanstd > 和 size 例如:

df.groupby(pd.cut(df['A'], bins=np.arange(11)))['B'].agg(['mean', 'std', 'size'])

输出:

             mean       std  size
A
(0, 1] 0.465408 NaN 1
(1, 2] 0.522665 0.149038 4
(2, 3] NaN NaN 0
(3, 4] 0.571255 0.441983 3
(4, 5] 0.659662 NaN 1
(5, 6] 0.394901 0.385560 2
(6, 7] 0.117359 0.107011 2
(7, 8] 0.268144 NaN 1
(8, 9] 0.541056 0.434788 3
(9, 10] 0.593431 0.173556 3

关于python - Pandas 数据帧 : mean of column B values within column A windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55493337/

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