2017-04-09 95 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