【问题标题】:Pandas: Applying filter function on column which type is a listPandas:在类型为列表的列上应用过滤器功能
【发布时间】:2021-10-04 22:25:51
【问题描述】:

所以我的问题是,我创建了带有列 ('Interval_range') 的 DF,它从其他两列 ('Start_interval 和 'End_interval') 压缩值并创建第三列 (Interval_range'),该类型是列表.现在,我想创建第四个('Absolute_frequency'),它计算外部列表('dataset')中的所有值,这些值大于'Interval_range'列的第一个参数,小于'Interval_range'的第二个参数' 柱子。我怎样才能做到这一点?我试图使用 .apply() 然后 filter() 但最后我什么也没得到。这是我所有的代码:

dataset= [8,30,30,50,86,94,102,110,169,170,176,236,240,241,242,255,262,276,279,282]

interval = (max(dataset)-min(dataset))/6

int1 = [round(min(dataset),2),round(min(dataset)+interval,2)]
int2= [round(int1[1],2),round(int1[1]+interval,2)]
int3 =[round(int2[1],2),round(int2[1]+interval,2)]
int4 =[round(int3[1],2),round(int3[1]+interval,2)]
int5 =[round(int4[1],2),round(int4[1]+interval,2)]
int6 =[round(int5[1],2),round(max(dataset),2)]

intervals = [int1,int2,int3,int4,int5,int6]

analiza = pd.DataFrame(intervals,index='A B C D E F'.split(),columns='Start_interval End_interval'.split())
analiza['Interval_range'] = list(zip(analiza['Start_interval'],analiza['End_interval']))

【问题讨论】:

    标签: python pandas dataframe filter apply


    【解决方案1】:

    如果您将dataset 转换为numpy 数组,您可以遍历'Interval_range' 列并使用apply()lambda 表达式检查值s 是否在元组范围内

    dataset = [8, 30, 30, 50, 86, 94, 102, 110, 169, 170, 176, 236, 240, 241, 242, 255, 262, 276, 279, 282]
    arr = np.array(dataset)
    ....
    analiza['Absolute_frequency'] = analiza['Interval_range'].apply(lambda x: ((x[0] <= arr) & (arr <= x[1])).sum())
    

    输出

       Start_interval  End_interval    Interval_range  Absolute_frequency
    A            8.00         53.67      (8.0, 53.67)                   4
    B           53.67         99.34    (53.67, 99.34)                   2
    C           99.34        145.01   (99.34, 145.01)                   2
    D          145.01        190.68  (145.01, 190.68)                   3
    E          190.68        236.35  (190.68, 236.35)                   1
    F          236.35        282.00   (236.35, 282.0)                   8
    

    【讨论】:

      猜你喜欢
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2023-01-17
      相关资源
      最近更新 更多