2017-08-23 353 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