如何将新列添加到按 groupby 分组的分层数据框中
Posted
技术标签:
【中文标题】如何将新列添加到按 groupby 分组的分层数据框中【英文标题】:How to add a new column to a hierarchical dataframe grouped by groupby 【发布时间】:2013-10-29 02:48:57 【问题描述】:以下脚本尝试计算风向和大小的平均结果。我的每月数据框有以下列:
data
Fecha Hora DirViento MagViento Temperatura Humedad PreciAcu
0 2011/07/01 00:00 318 6.6 21.22 100 1.7
1 2011/07/01 00:15 342 5.5 21.20 100 1.7
2 2011/07/01 00:30 329 6.6 21.15 100 4.8
3 2011/07/01 00:45 279 7.5 21.11 100 4.2
4 2011/07/01 01:00 318 6.0 21.16 100 2.5
我做的第一件事是将 DirViento 列转换为弧度
dir_rad=[]
for i in range(0, len(data['DirViento'])):
dir_rad.append(data['DirViento'][i]*(pi/180.0))
data['DirViento']=around(dir_rad,1)
现在获取组件的列:u 和 v 风并添加到数据
Uviento=[]
Vviento=[]
for i in range(0,len(data['MagViento'])):
Uviento.append(data['MagViento'][i]*sin(data[DirViento][i]))
Vviento.append(data['MagViento'][i]*cos(data[DirViento][i]))
data['u']=around(Uviento,1)
data['v']=around(Vviento,1)
data
Data columns:
Fecha 51 non-null values
Hora 51 non-null values
DirViento 51 non-null values
MagViento 51 non-null values
Temperatura 51 non-null values
Humedad 51 non-null values
PreciAcu 51 non-null values
u 51 non-null values
v 51 non-null values
dtypes: float64(6), int64(2), object(2)
现在我们索引数据框并分组
index=data.set_index(['Fecha','Hora'],inplace=True)
grouped = index.groupby(level=0)
data['u']
Fecha Hora
2011/07/01 00:00 -4.4
00:15 -1.7
00:30 -3.4
00:45 -7.4
01:00 -4.0
2011/07/02 00:00 -4.5
00:15 -4.2
00:30 -7.6
00:45 -3.8
01:00 -2.0
2011/07/03 00:00 -6.3
00:15 -13.7
00:30 -0.3
00:45 -2.5
01:00 -2.7
现在得到每天的合成风向
grouped.apply(lambda x: ((scipy.arctan2(mean(x['uu']),mean(x['vv'])))/(pi/180.0)))
Fecha
2011/07/01 -55.495677
2011/07/02 -39.176537
2011/07/03 -51.416339
得到的结果,我需要应用以下条件
for i in grouped.apply(lambda x: ((scipy.arctan2(mean(x['uu']),mean(x['vv'])))/(pi/180.0))):
if i < 180:
i=i+180
else:
if i > 180:
i=i-180
else:
i=i
print i
124.504323033
140.823463279
128.5836605
如何将上一个结果添加到下一个字典中
stat_cea = grouped.agg('MagRes':np.mean,'DirRes':np.mean,'Temperatura':np.mean,'Humedad':np.mean,'PreciAcu':np.sum)
stat_cea
Fecha DirRes Humedad PreciAcu Temperatura
2011/07/01 100.000000 30.4 21.367059
2011/07/02 99.823529 18.0 21.841765
2011/07/03 99.823529 4.0 21.347059
【问题讨论】:
【参考方案1】:您可以创建自己的聚合函数以应用于分组数据https://***.com/a/10964938/2530083。因此,对于您的情况,您可以尝试以下方法:
import numpy as np
def DirRes(group):
u=np.sum(group['MagViento'] * np.sin(np.deg2rad(group['DirViento'])))
v=np.sum(group['MagViento'] * np.cos(np.deg2rad(group['DirViento'])))
magres=np.sqrt(u*u+v*v)
magdir=np.rad2deg(np.arctan2(u,v))
if magdir<180:
magdir+=180
elif magdir>180:
magdir-=180
return magdir
def MagRes(group):
u=np.sum(group['MagViento'] * np.sin(np.deg2rad(group['DirViento'])))
v=np.sum(group['MagViento'] * np.cos(np.deg2rad(group['DirViento'])))
return np.sqrt(u*u + v*v)
【讨论】:
以上是关于如何将新列添加到按 groupby 分组的分层数据框中的主要内容,如果未能解决你的问题,请参考以下文章