df_transactions是一个如下所示的数据框:
id date is_cancel
0 A 2017-10-30 0
1 A 2017-10-31 1
2 B 2017-09-14 0
3 B 2017-09-15 0
我做了
mask = df_transactions.groupby('id',as_index=False)['is_cancel'].nth(-1)==1
在最后一行获取id_cancel == 1的id' s的布尔值。 我想得到2017-10-31'但
replacement = df_transactions.loc[mask[mask].index]['date']
返回
1 2017-10-31
我试过.values但是我得到了
['2017-10-31T00:00:00.000000000']
任何获取日期的方法? date列是numpy.datetime64类型
答案 0 :(得分:0)
有可能mask
返回更多True
s,因此需要按位置选择值 - 例如[0]
的第一个值:
print (df_transactions)
id date is_cancel
0 A 2017-10-30 0
1 A 2017-10-31 1
2 B 2017-09-14 0
3 B 2017-09-15 1
4 C 2017-09-18 0
5 C 2017-09-19 0
mask = df_transactions.groupby('id',as_index=False)['is_cancel'].nth(-1)==1
print (mask)
1 True
3 True
5 False
Name: is_cancel, dtype: bool
replacement = df_transactions.loc[mask[mask].index, 'date']
print (replacement)
1 2017-10-31
3 2017-09-15
Name: date, dtype: object
print (replacement.iat[0])
2017-10-31 00:00:00
print (replacement.values[0])
2017-10-31T00:00:00.000000000
#for date
print (replacement.iat[0].date())
2017-10-31
print (type(replacement.iat[0].date()))
<class 'datetime.date'>
#for string
print (replacement.iat[0].strftime('%Y-%m-%d'))
2017-10-31
print (type(replacement.iat[0].strftime('%Y-%m-%d')))
<class 'str'>