Pandas按索引获取日期值

时间:2017-10-31 09:41:40

标签: python pandas

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类型

1 个答案:

答案 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'>