gpt4 book ai didi

python - 计算 DataFrame 2x2 行列组的平均值

转载 作者:行者123 更新时间:2023-11-28 21:31:26 25 4
gpt4 key购买 nike

我有一个 DataFrame,我想采用多种方法并为其输出单个 Series/DataFrame。

我希望每个均值都按整个 DataFrame 的 2x2 切片 进行分组。

一个例子是:

df = pd.DataFrame({'0' : [4, 5, 6, 7, 8, 10], '1' : [2, 0, 1, 2, 3, 4],
'2' : [2, 4, 6, 8, 10, 12]}).T

df_mean

2.75
3
4
5
.
.
5.75
7.25

分组的方式是采用前几行 2x2“切片”([4, 5], [2, 0]) 计算平均值 (4+5+ 2+0)/4 = 2.75,然后对每个切片重复此操作,直到下一行,直到所有行上计算出所有可能的 2x2 切片。

即:

([5, 6], [0, 1]).mean() = 3
([6, 7], [1, 2]).mean() = 4
.
.
.
([3, 4], [10, 12]).mean() = 7.25

我只能弄清楚如何按行对 2 进行分组并取平均值:

df_mean = df.groupby(np.arange(len(df)) // 2).mean()

但这仅按每列 2 进行分组,而不是 2x2 的“单元格”。

有没有办法使用 groupby 来做到这一点?如果可能的话,我试图避免在行索引和列索引上进行计算成本高昂的 for 循环。

最佳答案

我沿两个轴使用 rollingmeandropna 以获得您想要的结果:

import pandas as pd

df = pd.DataFrame(
{'0': [4, 5, 6, 7, 8, 10], '1': [2, 0, 1, 2, 3, 4], '2': [2, 4, 6, 8, 10, 12]}
).T
mean_df = (
df.rolling(2)
.mean()
.dropna(how='all')
.rolling(2, axis='columns')
.mean()
.dropna(how='all', axis='columns')
)
print(mean_df)

      1     2     3     4     5
1 2.75 3.00 4.00 5.00 6.25
2 2.00 2.75 4.25 5.75 7.25

滚动创建计算平均值的窗口,当窗口采用数据帧之外的值时,dropna 会删除存在 NaN 值的行。

关于python - 计算 DataFrame 2x2 行列组的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58086839/

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