【问题标题】:Make bins coarser on pandas dataframe, and sum in counting columns在 pandas 数据帧上使 bin 更粗糙,并在计数列中求和
【发布时间】:2020-04-29 13:56:50
【问题描述】:

我有一个带有变量 (E) 的数据框,其中数据框中的值是 bin 的左边缘,以及每个 bin 的一组占用 (n)(以及不确定性平方 (v))。目前,这些以 100 的步长(通常)从 200 到 2000 分箱,然后将 2000 分箱到 +inf。但是,这些 bin 非常适合我需要执行的绘图,我需要将它们重新组合为 200、300、400、600、1000、+inf。

关键点:因为我从一个来源读取了几组这样的数据,所以并不是我所有的数据框都有条目,例如对于 bin 600-700,即一个数据帧中将缺少某些行,而另一个数据帧可能有它们的条目。我需要根据新的 bin 重新组合和求和 n 和 v,同时考虑到我的数据帧不是“常规”的事实。

这是一个示例数据框:

        E       n       v
0       200.0   26.0    1.3 
1       300.0   56.0    2.2
2       400.0   62.0    2.5
3       500.0   55.0    2.2
4       600.0   24.0    1.7
5       800.0   12.0    1.3
6       900.0   8.0     0.9
7       1000.0  4.0     0.6
8       1100.0  1.0     0.2

这是我想要的输出:

        E       n       v
0       200.0   26.0    1.3 
1       300.0   56.0    2.2
2       400.0   117.0   4.7
3       600.0   44.0    3.9
4       1000.0  5.0     0.8

非常感谢任何帮助或指导。

【问题讨论】:

    标签: pandas dataframe data-binding sum


    【解决方案1】:

    你可以cutagg

    s=df.groupby(pd.cut(df.E,[200,300,400,600,1000,np.inf],right=False)).agg({'E':'first','n':'sum','v':'sum'})
    
    s.E=s.index.map(lambda x :x.left)
    s.reset_index(drop=True,inplace=True)
    s
            E      n    v
    0   200.0   26.0  1.3
    1   300.0   56.0  2.2
    2   400.0  117.0  4.7
    3   600.0   44.0  3.9
    4  1000.0    5.0  0.8
    

    【讨论】:

    • 这太完美了,谢谢!唯一的区别是我必须删除 inplace=True,因为它返回的是 None 类型,但这可能是 pandas 版本之间的区别,或者只是我在宏中使用它的方式。再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2018-02-16
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多