web-dev-qa-db-ja.com

Pandas-中点、左、中央などを検索する間隔データ型

pandas 20.1では、間隔タイプを使用して、系列の中点、左、または中央の値を見つけることができます。

例:

  1. 間隔データ型列を作成し、これらの間隔でいくつかの集計計算を実行します。

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

これは、interval列のデータ型でdf_Statsを返します:df['Distances']

  1. 次に、シリーズ関数を使用して、間隔の左端をこれらの集計の結果に関連付けます。

    df['LeftEnd'] = df['Distances'].left
    

ただし、この要素は賢く実行できます。

    df.loc[0]['LeftEnd'] = df.loc[0]['Distances'].left

これは機能します。考え?

11
penguin

したがって、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')
6
Jeff

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)
4
Mahesh Babu J