2017-08-23 393 views
0

我有數據幀在大熊貓數據幀合併行

Date   CUSIP Asset Liability 
01-01-1990  A  1  NaN 
01-01-1990  A  Nan  2 
02-01-1990  A  3   2 
01-01-1990  B  Nan  2 
01-01-1990  B  1   2 

反正它成爲這個這樣的結合:

Date   CUSIP Asset Liability 
01-01-1990  A  1   2 
02-01-1990  A  3   2 
01-01-1990  B  1   2 

我想出的辦法是使用GROUPBY([ 「CUSIP」,日期])。AGG(功能)

其中I應用函數,其中最大(楠,3)= 3。

我有更簡單的方法嗎?

回答

1
>>> df.groupby(['Date', 'CUSIP']).apply(lambda group: group.ffill().bfill()).drop_duplicates() 
     Date CUSIP Asset Liability 
0 01-01-1990  A  1   2 
2 02-01-1990  A  3   2 
3 01-01-1990  B  1   2 
+0

是的!用nan方法實現max的問題​​在於,這是非常慢的。一個需要遍歷列表並丟棄nan值。我有時會討厭python對待nan的方式... – Lost1

+0

爲了確保數據中沒有錯誤,您還可以確保在給定日期只有一個CUSIP。假設上面的結果叫做'result',那麼result.groupby(['Date','CUSIP'])['CUSIP']。count()。max()'應該返回1. – Alexander

+0

感謝提示。我正在運行這個。這非常緩慢。是向前填充還是向後填充總是這樣慢? – Lost1