2017-07-07 7 views
1

説明が少し複雑ですので、最善を尽くします。私は2つの列:時間(1から24まで)と値(各時間に対応する)を持つパンダを持っています。データセットインデックスは膨大ですが、列時間は24時間ベースで繰り返されます(1〜24)。私は新しい24列を作成しようとしています。値-1、値-2、値-3 ...値-24は、各行と-1時間の値、-2時間(上の行)の値に対応します。パンダは、繰り返し数で既存の列を作成します

hour | value | value -1 | value -2 | value -3| ... | value - 24 
1  10  0   0   0    0 
2  11  10   0   0    0 
3  12  11   10   0    0 
4  13  12   11   10    0 
... 
24  32  31   30   29    0 
1  33  32   31   30    10 
2  34  33   32   31    11 
and so on... 

すべての数値は例です。私が言ったように、1日24時間だけでなく、24時間など24時間など、多くの行があります。 おかげさまでありがとうございました。

+0

なぜこのようにしたいのですか?あなたは冗長なデータをたくさん導入しているので、おそらくもっと良い方法でしょう。 – Denziloe

+0

おそらく、ロジックをデータベースに書き込むのではなく、独立した関数に書き込むほうがよいでしょう。あなたはおそらくそれを考え直すべきです。 – baloo

答えて

2

これは必要なものですか?

df = pd.DataFrame([[1,10],[2,11], 
      [3,12],[4,13]], columns=['hour','value']) 

for i in range(1, 24): 
    df['value -' + str(i)] = df['value'].shift(i).fillna(0) 

結果:

enter image description here

0

が、これはあなたが探しているものですか?

import pandas as pd 
df = pd.DataFrame({'hour': list(range(24))*2, 
        'value': list(range(48))}) 

shift_cols_n = 10 
for shift in range(1, shift_cols_n): 
    new_columns_name = 'value - ' + str(shift) 

    # Assuming that you don't have any NAs in your dataframe 
    df[new_columns_name] = df['value'].shift(shift).fillna(0) 

    # A safer (and a less simple) way, in case you have NAs in your dataframe 
    df[new_columns_name] = df['value'].shift(shift) 
    df.loc[:shift, new_columns_name] = 0 

print(df.head(9)) 

    hour value value - 1 value - 2 value - 3 value - 4 value - 5 \ 
0  0  0  0.0  0.0  0.0  0.0  0.0 
1  1  1  0.0  0.0  0.0  0.0  0.0 
2  2  2  1.0  0.0  0.0  0.0  0.0 
3  3  3  2.0  1.0  0.0  0.0  0.0 
4  4  4  3.0  2.0  1.0  0.0  0.0 
5  5  5  4.0  3.0  2.0  1.0  0.0 
6  6  6  5.0  4.0  3.0  2.0  1.0 
7  7  7  6.0  5.0  4.0  3.0  2.0 
8  8  8  7.0  6.0  5.0  4.0  3.0 

    value - 6 value - 7 value - 8 value - 9 
0  0.0  0.0  0.0  0.0 
1  0.0  0.0  0.0  0.0 
2  0.0  0.0  0.0  0.0 
3  0.0  0.0  0.0  0.0 
4  0.0  0.0  0.0  0.0 
5  0.0  0.0  0.0  0.0 
6  0.0  0.0  0.0  0.0 
7  1.0  0.0  0.0  0.0 
8  2.0  1.0  0.0  0.0 
関連する問題