次のデータフレームがあります:
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
上記の貼り付けたデータフレームからは明確ではないため、以下はスナップショットです。
月は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()
私は実際に組み込みの日時属性(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
カレンダーをインポートして、number-> nameから辞書マッピングを作成してから、そのマッピングを適用することができます。