Python:计算两日期的平均小数年份,忽略NaT值
我有两个日期时间数组:
index
0 2009-07-03
1 2009-07-03
2 2009-07-03
...
216426 2003-02-07
216427 2004-04-09
216428 NaT
index
0 NaT
1 NaT
2 2015-04-12
...
216426 2013-09-17
216427 2014-02-19
216428 NaT
我该怎么计算这两个数组的平均小数年份呢?如果其中一个数组在某个位置是NaT(表示没有时间),那就只取另一个数组在同一位置的值。如果两个数组在同一位置都是NaT,那就返回NaT。
1 个回答
0
一个可能的解决办法是这样的:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'index': ['2009-07-03', '2009-07-03', '2009-07-03']})
df2 = pd.DataFrame({'index': ['NaT', '2010-07-03', '2020-07-03']})
df1['index'] = pd.to_datetime(df1['index'])
df2['index'] = pd.to_datetime(df2['index'])
# Convert each date to a decimal year
df1['year'] = df1['index'].dt.year + df1['index'].dt.dayofyear / 365.25
df2['year'] = df2['index'].dt.year + df2['index'].dt.dayofyear / 365.25
df_years = pd.concat([df1['year'], df2['year']], axis=1)
df_years['average'] = df_years.mean(axis=1, skipna=True)
df_years['average'] = df_years['average'].replace({np.nan: pd.NaT})
print(df_years)
你可以看到,原始数据表中的NaT值被替换成了NaN。
上面代码的输出结果是:
year year average
0 2009.503765 NaN 2009.503765
1 2009.503765 2010.503765 2010.003765
2 2009.503765 2020.506502 2015.005133