Skip to main content
 首页 » 编程设计

python之按日期对行进行分组并覆盖 NaN 值

2025年05月04日10jackei

我有一个以下结构的数据框,针对这个问题进行了简化。

  A          B   C   D   E 
0 2014/01/01 nan nan 0.2 nan 
1 2014/01/01 0.1 nan nan nan  
2 2014/01/01 nan 0.3 nan 0.7 
3 2014/01/02 nan 0.4 nan nan 
4 2014/01/02 0.5 nan 0.6 0.8 

我这里有的是一天内跨多个时间戳的一系列读数。 B、C、D 和 E 列代表不同的位置。我正在读取的数据被设置为在指定的时间戳从某些位置获取数据并为其他位置填充 nan 值。

我想做的是按时间戳对数据进行分组,我可以使用 .GroupBy() 命令轻松完成。从那里,我希望分组数据中的 nan 值被后面行中采用的有效值覆盖,以便获得以下结果。

  A          B   C   D   E 
0 2014/01/01 0.1 0.3 0.2 0.7 
1 2014/01/02 0.5 0.4 0.6 0.8 

我该如何实现这一点?

请您参考如下方法:

尝试使用 df.groupby 和 DataFrameGroupBy.agg:

In [528]: df.groupby('A', as_index=False, sort=False).agg(np.nansum) 
Out[528]:  
            A    B    C    D    E 
0  2014/01/01  0.1  0.3  0.2  0.7 
1  2014/01/02  0.5  0.4  0.6  0.8 

带有 DataFrameGroupBy.sum 的较短版本(感谢 MaxU!):

In [537]: df.groupby('A', as_index=False, sort=False).sum() 
Out[537]:  
            A    B    C    D    E 
0  2014/01/01  0.1  0.3  0.2  0.7 
1  2014/01/02  0.5  0.4  0.6  0.8