簡體   English   中英

Pandas,基於現有的重復計數創建新列

[英]Pandas, create new columns based on existing with repeated count

解釋時有點復雜,所以我會盡我所能。 我有一個有兩列的熊貓:小時(從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...

所有值都是示例。 正如我所說,有很多行,不僅是一天中所有小時的24小時,而是所有下一個時間序列從1到24等等。在此先感謝,並可能力量與你同在!

這是你需要的嗎?

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)

結果:

在此輸入圖像描述

這是你想要的?

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  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM