2017-07-25 71 views
0

我有被简化为这个问题的下述结构的数据帧。集团行按日期和覆盖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值填补了其他位置。

我希望做的是GROUP BY时间戳的数据,我可以很容易地用.GroupBy()命令去做。从那里,我希望有在分组数据楠值在以后的行这样的,这是得到以下结果采取有效的值覆盖。

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 

我该如何去做到这一点?

回答

6

尝试df.groupbyDataFrameGroupBy.agg:(!感谢MaxU)

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

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 
+2

为什么我们需要'np.nansum'? 'df.groupby( 'A',as_index =假排序= FALSE)的.sum()' - 应该做的伎俩... – MaxU

+1

@MaxU辉煌。不知道sum()是否考虑到了。我仍然在学习如此欢迎您的意见:) –

+1

优秀的答案。链接到大熊猫文档在这里:https://pandas.pydata.org/pandas-docs/stable/groupby.html#groupby-sorting –

1

您可以通过使用pandasfirst

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 
试试这个
+0

尼斯一个...! +1 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ+1对你也是〜 – Wen