2017-07-25 57 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