Pandasのindexと仲良くなりたい

Pandasを触ってる時に、おいおいちょっと待てよという挙動をすることが多いのがindexまわり。 備忘としてまとめました。

set_index,reset_index

既にあるカラムをindex化したり、現在のindexをカラムにうつします。 非破壊なので新しいものを残したい時は新しい変数につっこみます。

import pandas as pd


df = pd.DataFrame(
  {
    "a":[1,2,3,4],
    "b":5
  },
  index = ['a','b','c','d']
)

#['a','b','c','d']をカラムに。カラム名はnameから取得。
df.reset_index()

#a列をindexに
df.set_index('a')

#そのまま
df

groupbyやconcatの際

加工処理をするとindexの中が勝手に変わったり変な値が入ったりするので、そのあたりを操作します。

#groupbyで勝手にindex化するのを防ぐ
df.groupby('a',as_index=False).mean()

#pivot_tableはないのでreset_indexを
#df.pivot_table(...).reset_index()

#concatするときにindexを振り直す
pd.concat([df,df],ignore_index=True)

並べ替え

昇降制御やnaのいち(ほぼないけど)なんかを制御して、indexで並び替えます。
sort_valuesとは別に存在している。

df.sort_index(
  ascending=True,
  na_position='last',
  ignore_index=True, #整列後、新しい値をふる
  key = lambda x : ...#indexの値を加工して並べ替える
)