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

时间:2017-07-25 12:06:29

标签: python pandas dataframe group-by nan

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

  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

我如何实现这一目标?

2 个答案:

答案 0 :(得分:6)

使用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

答案 1 :(得分:2)

您可以使用pandas first

尝试此操作
df.groupby('A', as_index=False).first()


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