Pandas中的Interval数据类型 - 查找中点,左侧,中心等

pen*_*uin 10 python intervals pandas

在pandas 20.1中,使用区间类型,是否可以在一系列中找到中点,左侧或中间值.

例如:

  1. 创建interval数据类型列,并在这些时间间隔内执行一些聚合计算:

    df_Stats = df.groupby(['month',pd.cut(df['Distances'], np.arange(0, 135,1))]).agg(aggregations)
    
    Run Code Online (Sandbox Code Playgroud)

这将返回带有interval column数据类型的df_Stats: df['Distances']

  1. 现在我想使用一个系列函数将间隔的左端与这些聚合的结果相关联:

    df['LeftEnd'] = df['Distances'].left
    
    Run Code Online (Sandbox Code Playgroud)

但是,我可以明智地运行这个元素:

    df.loc[0]['LeftEnd'] = df.loc[0]['Distances'].left
Run Code Online (Sandbox Code Playgroud)

这有效.思考?

Jef*_*eff 6

因此pd.cut()实际上创建了一个CategoricalIndex,并以IntervalIndex作为类别。

In [13]: df = pd.DataFrame({'month': [1, 1, 2, 2], 'distances': range(4), 'value': range(4)})

In [14]: df
Out[14]: 
   distances  month  value
0          0      1      0
1          1      1      1
2          2      2      2
3          3      2      3

In [15]: result = df.groupby(['month', pd.cut(df.distances, 2)]).value.mean()

In [16]: result
Out[16]: 
month  distances    
1      (-0.003, 1.5]    0.5
2      (1.5, 3.0]       2.5
Name: value, dtype: float64
Run Code Online (Sandbox Code Playgroud)

您可以简单地将其强制为IntervalIndex(如果它们是一列也可以),然后进行访问。

In [17]: pd.IntervalIndex(result.index.get_level_values('distances')).left
Out[17]: Float64Index([-0.003, 1.5], dtype='float64')

In [18]: pd.IntervalIndex(result.index.get_level_values('distances')).right
Out[18]: Float64Index([1.5, 3.0], dtype='float64')

In [19]: pd.IntervalIndex(result.index.get_level_values('distances')).mid
Out[19]: Float64Index([0.7485, 2.25], dtype='float64')
Run Code Online (Sandbox Code Playgroud)


小智 5

“ cut”是执行pd.cut之后的列名

代替->

 df['LeftEnd'] = df['Distances'].left
Run Code Online (Sandbox Code Playgroud)

执行以下其中一项->

 df['LeftEnd'] = df['cut'].apply(lambda x: x.left)

 df['LeftEnd'] = df['cut'].apply(lambda x: x.left).astype(str)
Run Code Online (Sandbox Code Playgroud)