2017-04-09 96 views
1

我有一個看起來像在圖片中的數據幀。 enter image description here按特定行計算特定列的平均值

現在,我想添加一個新列,它將顯示每天的功率平均值(假設數據每5分鐘進行一次採樣),但是當它是day_or_night時(日期= 0,夜= 1)。這一步我已經得到了:

train['avg_by_day'][train['day_or_night']==1] = train['power'][train['day_or_night']==1].mean() train['avg_by_day'][train['day_or_night']==0] = train['power'][train['day_or_night']==0].mean()

但是這只是增加了對應於天,或類似的一切權力值的平均值 - 夜晚,這是不是我以後是:特定平均分別爲每天/每晚。

我需要這樣的東西:train ['avg_by_day'] == train.power.mean()when day == 1 and day_or_night == 1,and this for each day。

回答

2

所以你要組由dayday_or_night數據框,並創建爲每個組平均power值的新列:

train['avg_by_day'] = train.groupby(['day','day_or_night'])['power']\ 
          .transform('mean') 

也許你還應該包括在分組列yearmonth,否則它是將每個月的第一天分組在一起,第二天一樣,等等。

+0

好想法!如果我簡單地寫道: 'train ['avg_by_day'] = train.groupby(['year','month','day','day_or_night'])['power' ] \ .transform('mean')' – saremisona

+0

是的,只需將它們添加到'groupby' :)。 – gereleth

+0

非常感謝! :) – saremisona