整数または「index」、「column」、「minor_axis」などではなく、ユーザー定義の名前で pandas コンテナー (DataFrame、Panel など) の軸にアクセスする方法があるかどうか疑問に思っています...
たとえば、次のデータ コンテナーを使用します。
df = DataFrame(randn(3,2),columns=['c1','c2'],index=['i1','i2','i3'])
df.index.name = 'myaxis1'
df.columns.name = 'myaxis2'
私はこれをしたいと思います:
df.sum(axis='myaxis1')
df.xs('c1', axis='myaxis2') # cross section
また、非常に便利です:
df.reshape(['myaxis2','myaxis1'])
(この場合はあまり関係ありませんが、次元が上がるとそうなる可能性があります)
その理由は、「時間」、「変数」、「パーセンタイル」など、さまざまな次元の多次元配列で多くの作業を行っているためです...同じコードが、DataFrame、Panel などのオブジェクトに適用されることがよくあります。あるいは、MultiIndex を使用した Panel4D または DataFrame ですらあります。今のところ、どの軸が合計または平均を計算するのに適しているかを知るために、オブジェクトの形状やスクリプトの一般的な設定をテストすることがよくあります。しかし、コンテナーが詳細 (DataFrame、Panel など) でどのように実装されているかを忘れて、問題の性質について単純に考える方がはるかに便利だと思います (たとえば、時間をかけて平均化したい、いくつかのパーセンタイルを使用する「確率的」モードで作業するか、単一の時系列を使用する「決定論的」モードで作業するかについては考えたくありません)。
この投稿を書いているときに、非常に便利な軸属性を (再) 発見しました。上記のコードは次のように変換できます。
nms = [ax.name for ax in df.axes]
axid1 = nms.index('myaxis1')
axid2 = nms.index('myaxis2')
df.sum(axis=axid1)
df.xs('c1', axis=axid2) # cross section
および「変形」機能 (ただし、3 次元のケースには適用されません...):
newshape = ['myaxis2','myaxis1']
axid = [nms.index(nm) for nm in newshape]
df.swapaxes(*axid)
さて、この投稿を書いている間にこれらの解決策を見つけたことを認めなければなりません (そして、これはすでに非常に便利です) が、MultiIndex 軸を持つ DataFrame (またはその他) を説明するために一般化することができ、すべての軸とラベルを検索します。 ...
私の意見では、これは pandas の使いやすさの大幅な改善になるでしょう (実際の構造を忘れるとパフォーマンス コストがかかる可能性がありますが、パフォーマンスを心配するユーザーはデータの整理方法に注意することができます)。
どう思いますか?