首页 > 解决方案 > 在 Pandas 中调整间隔

问题描述

我在 pandas 中为频率表创建了间隔。第一个间隔看起来像这样:(22, 29] 并且从左侧打开 - 我希望第一个间隔从两侧关闭,如下所示:[22, 29]。我尝试了间隔 [0].closed = "两者”,但没有奏效。

intervals = pd.interval_range(start = 22, end = 64, freq = 7)
vek_freq_table = pd.Series([0,0,0,0,0,0], index = intervals)


for x in df.loc[df.loc[:,"c"].notnull(), "c"]:
    for y in c_freq_table.index:
        if int(x) in y:
            c_freq_table.loc[y] +=1
            break

标签: pandasintervals

解决方案


您必须使用列表理解(或循环)构建自己的区间索引:

intervals = [pd.Interval(i.left, i.right) 
             if no != 0 else pd.Interval(i.left, i.right, closed='both') 
             for (no, i) in  enumerate(intervals)]
intervals

输出:

[Interval(22, 29, closed='both'),
 Interval(29, 36, closed='right'),
 Interval(36, 43, closed='right'),
 Interval(43, 50, closed='right'),
 Interval(50, 57, closed='right'),
 Interval(57, 64, closed='right')]

注意:更简单的解决方案似乎只是更改第一个元素,例如:

new_first_elem = pd.Interval(intervals[0].left, intervals[0].right, closed='both')
intervals[0] = new_first_elem 

但是,此代码会引发 TypeError:

TypeError: Index does not support mutable operations

推荐阅读