python - 在 pandas 中聚合多个数据类型时如何获得一致的行为?

标签 python pandas timedelta

我正在使用 pandas 0.20.2。

聚合混合数据类型数据帧时,我得到不一致的结果。 以下是一些示例数据:

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.nansumnp.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.nanmedian

内的时间戳列上应用了 np.isnan 造成的

为了避免这种情况,您可以定义自己的 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

关于python - 在 pandas 中聚合多个数据类型时如何获得一致的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464135/

相关文章:

python - 如何检测 `\t`的长度并格式化它?

python - YOLO在YOLO 9000中如何计算P(Object)

python - Pandas 的负时差

python - 重组 pandas 多索引列

python - Pandas .apply() : How to use a formula in apply() that involves values from preceding cells in the same column?

python - Pandas 绘制 Timedelta 系列,在选定时间使用垂直线

python - 如何在最后 10 分钟前获得 20 分钟

python - 获取 "__init__() got an unexpected keyword argument ' 文档 '"this error in python I' m 使用 Word2Vec 和 gensim

python - 将字节字符串转义为字节串

python - 为 Pandas DataFrame 图设置 xlim