web-dev-qa-db-ja.com

pandasで月を名前から名前に変更する

次のデータフレームがあります:

High    Low Open    Close   Volume  Adj Close   year    pct_day
month   day                             
1   1   NaN NaN NaN NaN NaN NaN 2010.0  0.000000
2   7869.853149 7718.482498 7779.655014 7818.089966 7.471689e+07    7818.089966 2010.0  0.007826
3   7839.965652 7719.758224 7775.396255 7777.940002 8.185879e+07    7777.940002 2010.0  0.002582
4   7747.175260 7624.540007 7691.152083 7686.288672 1.018877e+08    7686.288672 2010.0  -0.000744
5   7348.487095 7236.742135 7317.313616 7287.688546 1.035424e+08    7287.688546 2010.0  -0.002499
... ... ... ... ... ... ... ... ... ...
12  27  7849.846680 7760.222526 7810.902051 7798.639258 4.678145e+07    7798.639258 2009.5  -0.000833
28  7746.209996 7678.152204 7713.497907 7710.449358 4.187133e+07    7710.449358 2009.5  0.000578
29  7357.001540 7291.827806 7319.393874 7338.938345 4.554891e+07    7338.938345 2009.5  0.003321
30  7343.726938 7276.871507 7322.123779 7302.545316 3.967812e+07    7302.545316 2009.5  -0.000312
31  NaN NaN NaN NaN NaN NaN 2009.5  0.000000

上記の貼り付けたデータフレームからは明確ではないため、以下はスナップショットです。

enter image description here

月は1,2 3です...月のインデックスの名前をJan Feb Mar形式に変更できますか?

編集:

@ChihebNexusによる例の実装に苦労しています

日時なので、私のコードは次のとおりです:

full_dates = pd.date_range(start, end)
data = data.reindex(full_dates)
data['year'] = data.index.year
data['month'] = data.index.month
data['week'] = data.index.week
data['day'] = data.index.day
data.set_index('month',append=True,inplace=True)
data.set_index('week',append=True,inplace=True)
data.set_index('day',append=True,inplace=True)
df = data.groupby(['month', 'day']).mean()
7
Slartibartfast

私は実際に組み込みの日時属性(mac13kで説明)を使用することが最もPython的な解決策であるか、またはRajuのコメントで提案されているようにdfを作成する前に月を抽出するだけだと思います。

ただし、インデックスの再ラベル付けにさらに柔軟性が必要な場合は、 .rename レベル0インデックスの名前を変更するpd.DataFrameのメソッド。

あなたのdfで直接動作するはずの例として:

# set up df to match format of question
month = np.arange(1, 13)
day = np.ones(len(months))
a = np.zeros(len(months))
df = pd.DataFrame({'month':month, 'day':day, 'a':a})
df = df.set_index(['month', 'day'])

# create personalised mapping to rename index
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
month_map = {i+1:month for i, month in enumerate(months)}

# rename the level 0 index
df.rename(index=month_map, level=0, inplace=True)

dfを編集して、次のように生成します。

               a
month   day 
Jan     1.0   0.0
Feb     1.0   0.0
Mar     1.0   0.0
Apr     1.0   0.0
May     1.0   0.0
Jun     1.0   0.0
Jul     1.0   0.0
Aug     1.0   0.0
Sep     1.0   0.0
Oct     1.0   0.0
Nov     1.0   0.0
Dec     1.0   0.0
1
FChm

カレンダーをインポートして、number-> nameから辞書マッピングを作成してから、そのマッピングを適用することができます。

0
formicaman