2016-11-24 8 views
1

나는 Pandas 데이터 프레임으로 가져올 일부 데이터가 있습니다. 이 데이터는 "누적"및 시계열에 색인, 아래 참조 :Python Pandas 데이터 프레임 빼기 누적 열

시계열이 하루 앞으로 일을 이동 있도록 데이터는 매일 업데이트됩니다
     Raw data 
2016-11-23 10:00:00  48.6 
2016-11-23 11:00:00  158.7 
2016-11-23 12:00:00  377.8 
2016-11-23 13:00:00  591.7 
2016-11-23 14:00:00  748.5 
2016-11-23 15:00:00  848.2 

.

내가해야 할 일은 아래와 같이이 데이터 프레임을 가져 와서 새 열을 만드는 것입니다. 첫 번째 행은 단순히 "원시 데이터"열의 데이터를 복사합니다. 그 다음에 각 행은 '원시 데이터'열의 데이터를 가져 와서 그 전에 표시된 값을 뺍니다. 158.7 - 48.6 = 110.1, 377.8 - 158.7 = 219.1 등

파이썬/팬더의 "프로세스 데이터"열에있는 사람이 어떻게 달성 할 수 있는지 알고 있습니까?

    Raw data Processed data 
23/11/2016 10:00 48.6  48.6 
23/11/2016 11:00 158.7  110.1 
23/11/2016 12:00 377.8  219.1 
23/11/2016 13:00 591.7  213.9 
23/11/2016 14:00 748.5  156.8 
23/11/2016 15:00 848.2  99.7 
+0

, 당신이 매일 첫 번째 값으로 재설정하려면 "처리 된 데이터"열 필요하십니까 또는 그것은 하나의 긴 흐름이어야 하는가? – DSM

답변

4

당신은 shift 에드 열이 sub에 의해 빼기를 사용할 수 있습니다

마지막 채우기 NaN를 첫 번째 값으로 Raw data에.

df['Processed data'] = df['Raw data'].sub(df['Raw data'].shift()) 
df['Processed data'].iloc[0] = df['Raw data'].iloc[0] 
print (df) 
        Raw data Processed data 
2016-11-23 10:00:00  48.6   48.6 
2016-11-23 11:00:00  158.7   110.1 
2016-11-23 12:00:00  377.8   219.1 
2016-11-23 13:00:00  591.7   213.9 
2016-11-23 14:00:00  748.5   156.8 
2016-11-23 15:00:00  848.2   99.7 
+0

고맙습니다. 정확히 내가 필요로하는 것. – pottolom

0

있습니다 (고유하지 그 자체입니다) 더 열이 사건을 처리하는 장점을 가지고 팬더에 join이 작업을 수행 할 수 있습니다.

fid cumul_value 값이 변화 이상의 다른 매개 변수를 나타내고,
 
timestep    fid  cumul_value 
2016-11-23 10:00:00  1   48.6 
2016-11-23 11:00:00  1   158.7 
2016-11-23 12:00:00  1   377.8 
2016-11-23 13:00:00  1   591.7 
2016-11-23 14:00:00  1   748.5 
2016-11-23 15:00:00  1   848.2 
2016-11-23 10:00:00  2   88.6 
2016-11-23 11:00:00  2   758.7 
... 
2016-11-23 12:00:00  5   577.8 
2016-11-23 13:00:00  5   691.7 
2016-11-23 14:00:00  5   348.5 
2016-11-23 15:00:00  5   148.2 

같은 DataFrame을 가정한다. 열 을 cumul_value 열로부터 얻으려면 각 fid에 대해 value(fid,timestep) = cumul_value(fid,timestep) - cumul_value(fid,timestep - 1)이되도록하십시오.

onestep = timedelta(hours=1) 
df['prev_timestep'] = df['timestep'] - onestep 
df_cumul = df[['id','fid','timestep','cumul_value']] 
     .set_index(['timestep','fid']) 
df_val = df.join(df_cumul,on=['prev_timestep','fid'],rsuffix='_prev') 
df_val['value'] = df_val['cumul_value'] - df_val['cumul_value_prev'] 
df_val = df_val.drop(['prev_timestep','cumul_value_prev','cumul_value','id_prev'],axis=1) 

마무리까지 특별한 경우 가능성이 첫 번째 시간 단계를 처리하여 (그 t0 전화)

df_t0 = df_cumul[df_cumul['timestep'] == t0] 
df_val.loc[df_val.index.isin(df_t0.index),'value'] = df_t0['cumul_value'] 
관련 문제