python - 在 Pandas 中聚合多个 dtype 时如何获得一致的行为?
问题描述
我正在使用熊猫 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
?或者如何获取在 * 返回的多级数据框中的所有预期列?
解决方案
用户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
推荐阅读
- html - 在可滚动的 tbody 中对齐单元格文本
- reactjs - React 无法在 IE11 和更旧的 Android 浏览器上运行
- android - setContentView 上的 NullPointerException
- html - 使用 flex 布局时 Chrome 滚动条损坏
- python - ModuleNotFoundError:没有名为“版本”的模块
- javascript - 如何在 nativescript javascript 中从远程 php 检索多个数据?
- node.js - 无法运行节点 server.js
- typeerror - solve_ivp 错误:“所需的步长小于数字之间的间距。”
- android - 对于在线安卓游戏,有哪些服务可以保证APK文件的完整性,防止作弊?
- compiler-errors - LEX - /usr/bin/i686-linux-gnu-ld: 找不到 -ll