我正在预处理以下Pandas
数据框。
对于相同的assetid
,我想找到第一个和最后一个AccountingDate
,并根据isSold
的以下逻辑创建另一列AccountingDate
。
if AccountingDate of all deals for same assetid is Null:
isSold = False
else:
isSold = True
同时,我想为每个
assetid
找出第一个和最后一个Amount
的AccountingDate
。通常,
groupby
中的Pandas
聚合如下所示:df.groupby('assetid').agg({'A', func})
但是我的聚合函数要复杂得多,从
AccountingDate
生成3列FirstAccountingDate
,LastAccountingDate
,isSold
;从AccountingDate
和Amount
组合,以生成FirstDealAmount
和LastDealAmount
。做这个的最好方式是什么?
最佳答案
如果要获取first date
和last date
,并检查它们是否均为null
。您可以通过以下代码来实现。
print(df)
assetId date
0 1, NaT
1 1, 2018-10-01
2 1, 2018-10-02
3 1, 2018-10-03
4 4, NaT
5 4, NaT
def isSold(date_array):
last = date_array.max()
first = date_array.min()
return pd.isnull(last) & pd.isnull(last)
result = df.groupby("assetId").date.apply(isSold).reset_index()
print(result)
它给:
assetId date
0 1, False
1 4, True