我正在使用pandas 0.20.2。
在聚合混合dtype数据帧时,我得到的结果不一致。 以下是一些示例数据:
import pandas as pd
import numpy as np
df=pd.DataFrame(data=pd.date_range('20100201', periods=10,
freq='5h3min'),columns=['Start'])
df.loc[:,'End']=df.loc[:,'Start']+pd.Timedelta(4,'h')
df.loc[:,'Value']=42.0
df.loc[:,'Dur']=df.loc[:,'End']-df.loc[:,'Start']
我想将一些功能应用于Dur
(float
)和Value
(np.timedelta64
)。
特别是,结合np.nansum
和np.nanmax
我得到以下结果:
**df.resample('1D',on='Start')['Dur','Value'].agg([np.nansum,np.nanmedian])**
Out[16]:
Value
nansum nanmedian
Start
2010-02-01 210.0 42.0
2010-02-02 210.0 42.0
列'Dur'被静默忽略并删除,而如果仅适用
np.nansum
我获得了预期的结果,包括两列
f.resample('1D',on='Start')['Dur','Value'].agg([np.nansum])
Out[17]:
Dur Value
nansum nansum
Start
2010-02-01 20:00:00 210.0
2010-02-02 20:00:00 210.0
如何在应用nanmedian
时获得相同的内容?或者如何在*?
答案 0 :(得分:3)
用户Yakym Pirozhenko是正确的,错误是由np.isnan
在函数np.nanmedian
为避免这种情况,您可以定义自己的nanmedian
,它将在非空时间戳上应用np.median:
def mynanmedian(x):
return np.median(x[pd.notnull(x)])
df.resample('1D',on='Start')['Dur','Value'].agg([np.nansum,mynanmedian])
# out:
Dur Value
nansum mynanmedian nansum mynanmedian
Start
2010-02-01 20:00:00 04:00:00 210.0 42.0
2010-02-02 20:00:00 04:00:00 210.0 42.0
答案 1 :(得分:2)
np.nanmedian
调用未在datetime对象上定义的np.isnan
(而应使用np.isnat
)。因此,pandas默认忽略该列,因为无法调用该函数。
如果您想要显式错误,可以使用
df.groupby(...).agg({c: [np.nansum, np.nanmedian] for c in cols})