pandas - 如何针对通过 IntervalIndex 定义的列范围计算 2D DataFrame bin 的统计值?

标签 pandas dataframe

我有一个如下所示的 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 meanarithmetic 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)]) 传递到 binspd.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/

相关文章:

python - 计算二进制数并在 Pandas DataFrame 中查找交集

r - 如何为R中的每个组选择第二行和第三行

python - 如何创建汇总统计的数据框?

R - 如何重新排序行索引号

python - 递归:具有分布的账户值(value)

python - 用 pandas 重新采样数据框

python - 如何计算 pandas 数据框中列中 True 和 False block 的数量

python - Pandas concat DataFrames - 保持索引的原始顺序

python - 如何使联合核密度图在黑色背景上看起来更好(seaborn)

python - 从列中删除重复的单词