Python:计算两日期的平均小数年份,忽略NaT值

0 投票
1 回答
35 浏览
提问于 2025-04-14 15:25

我有两个日期时间数组:

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

撰写回答