English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pandas 索引の再構築

索引の再構築 行タグと列タグが変更されます。再インデックスとは、特定の軸上の给定タグセットにデータを一致させることを意味します。

インデックスを使用して、以下のような複数の操作が行えます。-

既存データを新しいラベルセットに一致させるために再排序します。ラベルデータがないラベル位置に欠損値(NA)マークを挿入します。

例:

 import pandas as pd
 import numpy as np
 N=20
 df = pd.DataFrame({
    'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
    'x': np.linspace(0,stop=N-1,num=N),
    'y': np.random.rand(N),
    'C': np.random.choice(['Low','Medium','High'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
 })
 # DataFrame再インデックス
 df_reindexed = df.reindex(index=[02,5], columns=['A', 'C', 'B'])
 print(df_reindexed)

実行結果:

           A    C     B
0  2016-01-01  Low   NaN
2  2016-01-03  High  NaN
5  2016-01-06  Low   NaN

再インデックスして他のオブジェクトと一致させる

オブジェクトを取得し、その軸を再インデックスして、別のオブジェクトと同じにする場合があります。以下の例を考えてみましょう。

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
 df1 = df1.reindex_like(df2)
 print(df1)

実行結果:

         col1         col2         col3
0    -2.467652    -1.211687    -0.391761
1    -0.287396     0.522350     0.562512
2    -0.255409    -0.483250     1.866258
3    -1.150467    -0.646493    -0.222462
4     0.152768    -2.056643     1.877233
5    -1.155997     1.528719    -1.343719
6    -1.015606    -1.245936    -0.295275

ここでは、df1 DataFrame像df2も変更され再インデックスされます。列名が一致しない場合、列タグ全体にNANが追加されます。

再インデックス時の埋め込み

reindex() オプションのmethodパラメータは、以下の値のいずれかの埋め込み方法です

pad/ffill − 前方に埋める値

bfill/backfill − 後方に埋める値

nearest − 最も近いインデックス値から埋める

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # NANを埋める
 print df2.reindex_like(df1)
 # 現在前の値でNANを埋める
 print("前向きに埋めるデータフレーム:")
 print(df2.reindex_like(df1,method='ffill'))

実行結果:

         col1        col2       col3
0    1.311620   -0.707176   0.599863
1   -0.423455   -0.700265   1.133371
2         NaN         NaN        NaN
3         NaN         NaN        NaN
4         NaN         NaN        NaN
5         NaN         NaN        NaN
前向きに埋めるデータフレーム:
         col1        col2        col3
0    1.311620   -0.707176    0.599863
1   -0.423455   -0.700265    1.133371
2   -0.423455   -0.700265    1.133371
3   -0.423455   -0.700265    1.133371
4   -0.423455   -0.700265    1.133371
5   -0.423455   -0.700265    1.133371

最後の4行が埋め込まれました。

再インデックス時の埋め込み制限

limitパラメータは再インデックス時の埋め込みに追加の制御を提供します。制限は連続して一致する最大数を指定します。以下の例を考えてみましょう。-

 import pandas as pd
 import numpy as np
  
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # NANを埋める
 print df2.reindex_like(df1)
 # 現在前の値でNANを埋める print("前向きに埋める制限为",1データフレーム:
 print(df2.reindex_like(df1,method='ffill',limit=1))

実行結果:

         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2         NaN         NaN         NaN
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN
前向きフィルリングの制限:1データフレーム:
         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2   -0.055713   -0.021732   -0.174577
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

前の6行は、7行にのみフィルタリングされています。各行はそのままです。

リネーム

rename()メソッドを使用すると、辞書やシリーズなどのマッピングまたは任意の関数に基づいて軸を再マッピングできます。  
以下の例を考えてみましょう。-

  import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 print df1
 print ("行と列をリネームした後:")
 print(df1.rename(columns={'col1': 'c1', 'col2': 'c2'},
 index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))

実行結果:

         col1        col2        col3
0    0.486791    0.105759    1.540122
1   -0.990237    1.007885   -0.217896
2   -0.483855   -1.645027   -1.194113
3   -0.122316    0.566277   -0.366028
4   -0.231524   -0.721172   -0.112007
5    0.438810    0.000225    0.435479
行と列をリネームした後:
                c1          c2        col3
apple     0.486791    0.105759    1.540122
banana   -0.990237    1.007885   -0.217896
durian   -0.483855   -1.645027   -1.194113
3        -0.122316    0.566277   -0.366028
4        -0.231524   -0.721172   -0.112007
5         0.438810    0.000225    0.435479