首页 > 解决方案 > 聚合前删除空行

问题描述

我有一个数据帧列表(带有 datetimeindex),每个数据帧中两行之间的最短时间(日期)为 15 分钟。我想使用平均值、中值、几何平均值和其他方法将所有数据帧(按天)分组。问题是有些日子在所有数据框中都不包含任何数据。一些方法,比如mean,会忽略它,但使用其他方法会导致错误。我的问题是如何在应用该方法之前删除这些日子?

数据:

[                                 col1     col2      col3    col4  
 date                                                                   
 2020-02-03 08:00:00+00:00    3.616141   3.362717  1.627347    2.242732   
 2020-02-03 08:15:00+00:00    4.043727   3.749407  1.790467    2.272293   
 2020-02-03 08:30:00+00:00    3.872196   3.595969  1.729359    2.221447  
 ...                               ...        ...       ...         ...  
 2020-12-25 08:45:00+00:00    6.645853   1.352785  0.081961    4.112518   
 2020-12-25 09:30:00+00:00    6.066697   1.068805  0.058980    3.991505   
 
 [2204 rows x 6 columns],
...]

聚合后的数据均值:

                                col1      col2        col3     col4
date                        
2020-02-02 00:00:00+00:00   4.636509    0.842644    0.069093    1.393849    
2020-02-03 00:00:00+00:00   6.649390    1.077993    0.081713    1.798794    
2020-02-04 00:00:00+00:00   5.765083    1.113354    0.097113    1.668112    
2020-02-05 00:00:00+00:00      NaN        NaN          NaN       NaN    
2020-02-06 00:00:00+00:00      NaN        NaN          NaN       NaN    
...                           ...         ...          ...       ...

如您所见,02/05 和 02/06 这两天都没有数据。

我的代码与返回错误的 gstd 聚合:

from scipy.stats import gstd

cols = ["col1", "col2","col3","col4"]    
joined = pd.concat(df.reset_index() for df in datalist)
joined = joined.replace({np.nan:1, 0:1})
joined[cols] = joined[cols].mask(joined[cols] < 0, 1)

df = joined.set_index('date').groupby(pd.Grouper(freq='D'))

std = df.apply(gstd)
#std = df.agg(gstd)

错误:

ValueError: Degrees of freedom <= 0 for slice

标签: pythondataframeaggregate

解决方案


你有没有尝试过

df.dropna()

?

这将删除包含至少一个空值的行。


推荐阅读