あなたは希望の日付を見つけるためにNumPy datetime64/timedelta64 arithmeticを使用することができます。
In [97]: (np.asarray(df['year'], dtype='datetime64[Y]')-1970)+(np.asarray(df['doy'], dtype='timedelta64[D]')-1)
Out[97]:
array(['2000-02-18', '2000-03-05', '2000-03-21', '2001-04-07',
'2001-04-23', '2001-05-09', '2001-05-25', '2001-06-10'], dtype='datetime64[D]')
構成日付は日付のさまざまな部分を与えられているので(例えば年、月、日、週、時間、など)ここでは、共通の問題ですそれを容易にするためのユーティリティ関数です:
def compose_date(years, months=1, days=1, weeks=None, hours=None, minutes=None,
seconds=None, milliseconds=None, microseconds=None, nanoseconds=None):
years = np.asarray(years) - 1970
months = np.asarray(months) - 1
days = np.asarray(days) - 1
types = ('<M8[Y]', '<m8[M]', '<m8[D]', '<m8[W]', '<m8[h]',
'<m8[m]', '<m8[s]', '<m8[ms]', '<m8[us]', '<m8[ns]')
vals = (years, months, days, weeks, hours, minutes, seconds,
milliseconds, microseconds, nanoseconds)
return sum(np.asarray(v, dtype=t) for t, v in zip(types, vals)
if v is not None)
df = pd.DataFrame({'doy': [49, 65, 81, 97, 113, 129, 145, 161],
'year': [2000, 2000, 2000, 2001, 2001, 2001, 2001, 2001]})
df.index = compose_date(df['year'], days=df['doy'])
することができます利回り
doy year
2000-02-18 49 2000
2000-03-05 65 2000
2000-03-21 81 2000
2001-04-07 97 2001
2001-04-23 113 2001
2001-05-09 129 2001
2001-05-25 145 2001
2001-06-10 161 2001
感謝@unutbu! 1970年頃に特別なことがありますか?私は1900年か2000年を使うことができますか? – user308827
'1970-01-01 00:00:00 UTC'は[Unix Epoch](https://en.wikipedia.org/wiki/Unix_time)です。 np.array([0]、dtype = 'datetime64 [Y]') 'は' array(['1970']、dtype = 'datetime64 [Y]') 'を返すので、1970年を引く必要があります。 – unutbu
非常に明確な! – user308827