我想在candidate_id中找到startdate和enddate中的最小日期,但是skipna.startdate和enddate列是datetime64格式。保证数据至少有一个startdate或enddate不为null。而且我也不想使用fillna。
>>> selected= dat[((pd.notnull(dat['startdate'])) | (pd.notnull(dat['enddate'])))][['candidate_id','startdate','enddate']]
>>> f=selected[200:206]
>>> f
candidate_id startdate enddate
239 10038 2001-01-01 00:00:00 2008-01-01 00:00:00
240 10038 1994-01-01 00:00:00 2001-01-01 00:00:00
241 10038 1992-01-01 00:00:00 1994-01-01 00:00:00
242 1003 2006-01-01 00:00:00 2013-06-12 00:00:00
243 1003 1985-01-01 00:00:00 2005-07-01 00:00:00
244 10040 1994-01-01 00:00:00 NaT
>>> k=f.groupby('candidate_id')[['startdate','enddate']].min()
>>> k
startdate enddate
candidate_id
1003 1985-01-01 00:00:00 2005-07-01 00:00:00
10038 1992-01-01 00:00:00 1994-01-01 00:00:00
10040 1994-01-01 00:00:00 NaN
我试过了:
>>> k.min(axis=1, skipna=True)
candidate_id
1003 NaN
10038 NaN
10040 NaN
我想要的是:
candidate_id
1003 1985-01-01 00:00:00
10038 1992-01-01 00:00:00
10040 1994-01-01 00:00:00
谢谢!
答案 0 :(得分:0)
似乎是一个错误,因为min
k.enddate
属于object_type(请参阅NaN
而不是NaT
):
>>> k.enddate
candidate_id
1003 2005-07-01 00:00:00
10038 1994-01-01 00:00:00
10040 NaN
Name: enddate, dtype: object
以下将做一个解决方法:
>>> k.enddate = pd.to_datetime(k.enddate)
>>> k.min(axis=1, skipna=True)
candidate_id
1003 1985-01-01 00:00:00
10038 1992-01-01 00:00:00
10040 1994-01-01 00:00:00
dtype: datetime64[ns]
答案 1 :(得分:0)
这只是昨天在主人身上修好的(将包含在0.13中,即将发布)。在datetime64 [ns]和缺少值的情况下,Groupby没有返回正确的dtypes。
In [25]: df
Out[25]:
start_date end_date candidate_id
0 2001-01-01 00:00:00 2008-01-01 00:00:00 10038
1 1994-01-01 00:00:00 2001-01-01 00:00:00 10038
2 1992-01-01 00:00:00 1994-01-01 00:00:00 10038
3 2006-01-01 00:00:00 2013-06-12 00:00:00 1003
4 1985-01-01 00:00:00 2005-07-01 00:00:00 1003
5 1994-01-01 00:00:00 NaT 10040
[6 rows x 3 columns]
In [26]: df.dtypes
Out[26]:
start_date datetime64[ns]
end_date datetime64[ns]
candidate_id int64
dtype: object
In [28]: df.groupby('candidate_id')[['start_date','end_date']].min()
Out[28]:
start_date end_date
candidate_id
1003 1985-01-01 00:00:00 2005-07-01 00:00:00
10038 1992-01-01 00:00:00 1994-01-01 00:00:00
10040 1994-01-01 00:00:00 NaT
[3 rows x 2 columns]
In [29]: pd.__version__
Out[29]: '0.13.0rc1-62-g507ffb5'