如何在一系列特定的宽度变化的列范围内计算平均值?

时间:2019-10-29 10:14:54

标签: python-3.x pandas dataframe

我有一个像这样的大熊猫1D DataFrame(列:float,值:float):

    1.0     1.1     1.2     1.3     1.4     1.5     1.6     1.7     1.8
0   1.0     2.0     5.0     4.0     3.0     NaN     1.0     7.0     NaN

我想计算特定行范围内的平均值。 NaN应被视为0.0。列范围不具有恒定的列数w.r.t.整个列范围(1.0 - 1.21.3 - 1.51.6 - 1.9),但列数w.r.t.变化。整个色谱柱范围1.0 - 1.3(4列),1.4 - 1.7(4列),1.8(1列)。我想得到以下DataFrame作为结果:

    1.0     1.1     1.2     1.3     1.4     1.5     1.6     1.7     1.8
0   3.00    3.00    3.00    3.00    2.75    2.75    2.75    2.75    0.00

要实现这一目标,最高效且最了解内存的实现是什么?

1 个答案:

答案 0 :(得分:1)

方法1-楼层划分//

此方法假定您要groupby的列的范围相等,在这种情况下为每4列。

df.fillna(0).groupby(np.arange(df.shape[1]) // 4, axis='columns').transform('mean')

   1.0  1.1  1.2  1.3   1.4   1.5   1.6   1.7  1.8
0  3.0  3.0  3.0  3.0  2.75  2.75  2.75  2.75  0.0

方法2-np.digitize

在这里我们可以为bins创建列的习惯groupby

bins = np.array([1, 1.4, 1.8])
grps = np.digitize(df.columns, bins)

df.fillna(0).groupby(grps, axis='columns').transform('mean')

   1.0  1.1  1.2  1.3   1.4   1.5   1.6   1.7  1.8
0  3.0  3.0  3.0  3.0  2.75  2.75  2.75  2.75  0.0