2016-11-03 10 views
4

I持って、次のデータフレームインデックスが0,1ある再形成パンダDATAFRAME

  A 
0 2012-01-13 10:00:06 
1 2012-01-13 11:09:04 
2 2012-01-13 12:07:05 
3 2012-01-13 13:03:04 
4 2012-01-16 10:00:10 
5 2012-01-16 11:09:04 
6 2012-01-16 12:01:05 
7 2012-01-16 13:09:04 
8 2012-01-17 10:01:04 
9 2012-01-17 11:05:06 
10 2012-01-17 12:01:05 
11 2012-01-17 13:04:04 

..など

日に基づいてデータを転置する方法はありますか?例えば、新たなデータフレームは次のようになります。

  A      B     C     D 
0 2012-01-13 10:00 2012-01-13 11:09 2012-01-13 12:07 2012-01-13 13:03 
1 2012-01-16 10:00 2012-01-16 11:09 2012-01-16 12:01 2012-01-16 13:09 
2 2012-01-17 10:01 2012-01-17 11:05 2012-01-17 12:01 2012-01-17 13:04 

答えて

5

私はあなたがしてreset_indexpivotを使用し、cumcountでグループを作成し、dt.dayにより日の列を作成する必要があると思います。最後に新しい列名を割り当てます:

#if dtype of column is not datetime 
df.A = pd.to_datetime(df.A) 

df['day'] = df.A.dt.day 
df['groups'] = df.groupby('day').cumcount() 

df = df.pivot(index='day', columns='groups', values='A').reset_index(drop=True) 
df.columns = list('ABCD') 
print (df) 
        A     B     C \ 
0 2012-01-13 10:00:06 2012-01-13 11:09:04 2012-01-13 12:07:05 
1 2012-01-16 10:00:10 2012-01-16 11:09:04 2012-01-16 12:01:05 
2 2012-01-17 10:01:04 2012-01-17 11:05:06 2012-01-17 12:01:05 

        D 
0 2012-01-13 13:03:04 
1 2012-01-16 13:09:04 
2 2012-01-17 13:04:04 
+0

これは素晴らしいアイデアですが、dfが大きければ1ヵ月以上は問題があります。たとえば、別の13日目(たとえばfebの13日)がある場合、「グループ」は4,5,6,7になります。 1ヶ月に基づいてグループ化する方法はありますか? – Gabriel

+1

あなたは 'df ['day'] = df.A.dt.strftime( '%d-%m')'を使うことができると思います。驚くべきことに – jezrael

+0

。ありがとう。コメントをupvotingする。 – Gabriel

関連する問題