作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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 循环。
最佳答案
我沿两个轴使用 rolling
、mean
和 dropna
以获得您想要的结果:
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/
我是一名优秀的程序员,十分优秀!