Pandas 中的间隔数据类型 - 查找中点、左侧、中心等
Interval datatype in Pandas - find midpoint, left, center etc
在pandas20.1中,使用区间类型,是否可以在一个序列中找到中点、左值或中心值。
例如:
创建一个区间数据类型列,并对这些区间执行一些聚合计算:
df_Stats = df.groupby(['month',pd.cut(df['Distances'], np.arange(0, 135,1))]).agg(aggregations)
此 returns df_Stats 具有间隔列数据类型:df['Distances']
现在我想使用级数函数将区间的左端与这些聚合的结果相关联:
df['LeftEnd'] = df['Distances'].left
但是,我可以 运行 这个元素明智的:
df.loc[0]['LeftEnd'] = df.loc[0]['Distances'].left
这行得通。想法?
所以 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
您可以简单地将它们强制转换为 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')
执行pd.cut.
后说'cut'是列名
而不是 ->
df['LeftEnd'] = df['Distances'].left
执行以下操作之一 -->
df['LeftEnd'] = df['cut'].apply(lambda x: x.left)
df['LeftEnd'] = df['cut'].apply(lambda x: x.left).astype(str)
在pandas20.1中,使用区间类型,是否可以在一个序列中找到中点、左值或中心值。
例如:
创建一个区间数据类型列,并对这些区间执行一些聚合计算:
df_Stats = df.groupby(['month',pd.cut(df['Distances'], np.arange(0, 135,1))]).agg(aggregations)
此 returns df_Stats 具有间隔列数据类型:df['Distances']
现在我想使用级数函数将区间的左端与这些聚合的结果相关联:
df['LeftEnd'] = df['Distances'].left
但是,我可以 运行 这个元素明智的:
df.loc[0]['LeftEnd'] = df.loc[0]['Distances'].left
这行得通。想法?
所以 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
您可以简单地将它们强制转换为 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')
执行pd.cut.
后说'cut'是列名而不是 ->
df['LeftEnd'] = df['Distances'].left
执行以下操作之一 -->
df['LeftEnd'] = df['cut'].apply(lambda x: x.left)
df['LeftEnd'] = df['cut'].apply(lambda x: x.left).astype(str)