1. ホーム
  2. python

pandas.Series.applyのインデックスにアクセスする。

2023-10-13 11:02:49

質問

MultiIndexシリーズがあるとします。 s :

>>> s
     values
a b
1 2  0.1 
3 6  0.3
4 4  0.7

で、その行のインデックスを利用した関数を適用したい。

def f(x):
   # conditions or computations using the indexes
   if x.index[0] and ...: 
   other = sum(x.index) + ...
   return something

どうすれば s.apply(f) を行うことはできますか?このような操作を行うには、どのような方法が推奨されますか?私は、各行と同じMultiIndexにこの関数を適用した結果の値で新しいシリーズを取得することを期待しています。

どのように解決するのですか?

私は信じていません apply はインデックスにアクセスすることはできません。これは各行をSeriesではなくnumpyオブジェクトとして扱います。

In [27]: s.apply(lambda x: type(x))
Out[27]: 
a  b
1  2    <type 'numpy.float64'>
3  6    <type 'numpy.float64'>
4  4    <type 'numpy.float64'>

この制限を回避するには、インデックスをカラムに昇格させ、関数を適用し、元のインデックスでSeriesを再作成してください。

Series(s.reset_index().apply(f, axis=1).values, index=s.index)

他のアプローチでは s.get_level_values を使うかもしれませんが、これは私の意見では少し醜いですし、あるいは s.iterrows() の方が遅いかもしれません。 f が何をするかによります。