Python 在数据帧中合并行
我有数据框Python 在数据帧中合并行,python,pandas,Python,Pandas,我有数据框 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 C
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,Date].agg函数
其中我应用了一个函数,其中maxnan,3=3
有更简单的方法吗?是的!实现max with nan方法的问题是速度太慢。需要循环遍历列表并放弃nan值。我有时讨厌python处理nan的方式……为了确保数据中没有错误,您还可以确保在任何给定日期只有一个CUSIP。假设上面的结果称为result,那么result.groupby['Date','CUSIP']['CUSIP'].count.max应该返回1。感谢您的提示。我正在运行这个。这很慢。正向填充和反向填充总是这么慢吗?df.info的输出是什么?列是资产和负债浮动吗?日期列的类型是什么?此外,drop_副本可能会减慢速度。试着不用它,看看是否有改进。如果是这样的话,并且您已经检查了数据,以确保上面我的评论中没有重复,您可以再次分组。df.groupby['Date','CUSIP'].applylambda组:group.ffill.bfill.groupby['Date','CUSIP'].firstRangeIndex:501896个条目,0到501895个数据列总计4列:日期501896非空datetime64[ns]CUSIP 501372非空对象资产386228非空浮点64负债385416非空浮点64数据类型:datetime64[ns]1,浮点642,反对意见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