我有一个如下所示的 2D DataFrame
0.0 0.1 0.2 0.3 0.4 ...
0 0 1 NaN 3 4
1 NaN NaN NaN NaN 9
...
。对于每一行,我想计算 arithmetic mean和 arithmetic standard deviation对于特定的等宽列范围(bin),应通过 IntervalIndex
定义。 NaN
应被忽略。例如。与 pd.IntervalIndex.from_tuples([(0.0, 0.2), (0.2, 0.4)]
我期望类似的东西
(0.0, 0.2) (0.2, 0.4)
mean 0. 3.5
std ...
间隔应支持不同的宽度。由于 DataFrame 有很多行和很多列,内存和执行性能至关重要。如何获得尽可能高性能的预期输出?
最佳答案
您可以进行剪切和分组:
df.columns=df.columns.astype(float)
cuts = pd.cut(df.columns, bins=[0, 0.2, 0.4],include_lowest=True)
df.groupby(cuts, axis=1).mean()
输出:
(-0.001, 0.2] (0.2, 0.4]
0 0.5 3.5
1 NaN 9.0
注意:您还可以将 pd.IntervalIndex.from_tuples([(0.0, 0.2), (0.2, 0.4)])
传递到 bins
在 pd.cut
中,如果您已经在某处定义了它们。但需要注意 0
,它不包含在上面的区间内。
注释 2: 看来 groupby().agg
不支持 axis=1
上的 std
。您可以转换数据框:
df.T.groupby(cuts).agg(['mean','std']).T
输出:
(-0.001, 0.2] (0.2, 0.4]
0 mean 0.500000 3.500000
std 0.707107 0.707107
1 mean NaN 9.000000
std NaN NaN
关于pandas - 如何针对通过 IntervalIndex 定义的列范围计算 2D DataFrame bin 的统计值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58695241/