如何计算熊猫日期系列的平均周期持续时间?
How to calculate the average periode duration of date series with panda?
我想计算不同事件发生的平均周期持续时间。
我得到的数据中每个事件都有一个 ID,并在由其 ID 标识的一行中进行跟踪。每次事件发生时,都会保存发生日期。
df_starting_point = pd.DataFrame(
[{'id': 3, '0': pd.to_datetime('2020-11-23T00:00:00.000000000') , '1': np.nan, '2' : np.nan},
{'id': 123, '0': pd.to_datetime('2020-03-22T00:00:00.000000000') , '1': np.nan, '2' : np.nan},
{'id': 13215, '0': pd.to_datetime('2020-03-23T00:00:00.000000000') , '1': pd.to_datetime('2020-03-28T00:00:00.000000000'), '2' : pd.to_datetime('2020-04-03T00:00:00.000000000')},
{'id': 123, '0': pd.to_datetime('2020-03-22T00:00:00.000000000') , '1': pd.to_datetime('2020-03-23T00:00:00.000000000'), '2' : np.nan}
])
现在我想计算以周为单位的每个相邻日期之间的距离,并计算每个 event/id 跟踪的平均周期持续时间。
我要计算的平均持续时间的数据框如下所示:
df_end_point = pd.DataFrame(
[{'id': 3, '0': np.nan , '1': np.nan},
{'id': 123, '0': np.nan , '1': np.nan},
{'id': 13215, '0': pd.to_datetime('2020-03-23T00:00:00.000000000') - pd.to_datetime('2020-03-28T00:00:00.000000000'), '1': pd.to_datetime('2020-03-28T00:00:00.000000000') - pd.to_datetime('2020-04-03T00:00:00.000000000')},
{'id': 123, '0': pd.to_datetime('2020-03-22T00:00:00.000000000') - pd.to_datetime('2020-03-23T00:00:00.000000000'), '1': np.nan}
])
有没有办法优雅地做到这一点?如果我不需要对此进行编程,我将不胜感激:)
谢谢朋友们!
根据我的理解,你可以在 axis=1,period -1 上做一个移位,然后减去,创建一个相同规格的掩码:
df_end_point = df_starting_point.set_index("id")
df_end_point= (df_end_point.sub(df_end_point.shift(-1,axis=1))
.dropna(how='all',axis=1).reset_index())
print(df_end_point)
id 0 1
0 3 NaT NaT
1 123 NaT NaT
2 13215 -5 days -6 days
3 123 -1 days NaT
早期版本:
df_end_point = df_starting_point.set_index("id")
df_end_point = (df_end_point.diff(-1,axis=1)
.mask(df_end_point.isna().shift(-1,axis=1).fillna(False))
.dropna(how='all',axis=1).reset_index())
我想计算不同事件发生的平均周期持续时间。
我得到的数据中每个事件都有一个 ID,并在由其 ID 标识的一行中进行跟踪。每次事件发生时,都会保存发生日期。
df_starting_point = pd.DataFrame(
[{'id': 3, '0': pd.to_datetime('2020-11-23T00:00:00.000000000') , '1': np.nan, '2' : np.nan},
{'id': 123, '0': pd.to_datetime('2020-03-22T00:00:00.000000000') , '1': np.nan, '2' : np.nan},
{'id': 13215, '0': pd.to_datetime('2020-03-23T00:00:00.000000000') , '1': pd.to_datetime('2020-03-28T00:00:00.000000000'), '2' : pd.to_datetime('2020-04-03T00:00:00.000000000')},
{'id': 123, '0': pd.to_datetime('2020-03-22T00:00:00.000000000') , '1': pd.to_datetime('2020-03-23T00:00:00.000000000'), '2' : np.nan}
])
现在我想计算以周为单位的每个相邻日期之间的距离,并计算每个 event/id 跟踪的平均周期持续时间。
我要计算的平均持续时间的数据框如下所示:
df_end_point = pd.DataFrame(
[{'id': 3, '0': np.nan , '1': np.nan},
{'id': 123, '0': np.nan , '1': np.nan},
{'id': 13215, '0': pd.to_datetime('2020-03-23T00:00:00.000000000') - pd.to_datetime('2020-03-28T00:00:00.000000000'), '1': pd.to_datetime('2020-03-28T00:00:00.000000000') - pd.to_datetime('2020-04-03T00:00:00.000000000')},
{'id': 123, '0': pd.to_datetime('2020-03-22T00:00:00.000000000') - pd.to_datetime('2020-03-23T00:00:00.000000000'), '1': np.nan}
])
有没有办法优雅地做到这一点?如果我不需要对此进行编程,我将不胜感激:)
谢谢朋友们!
根据我的理解,你可以在 axis=1,period -1 上做一个移位,然后减去,创建一个相同规格的掩码:
df_end_point = df_starting_point.set_index("id")
df_end_point= (df_end_point.sub(df_end_point.shift(-1,axis=1))
.dropna(how='all',axis=1).reset_index())
print(df_end_point)
id 0 1
0 3 NaT NaT
1 123 NaT NaT
2 13215 -5 days -6 days
3 123 -1 days NaT
早期版本:
df_end_point = df_starting_point.set_index("id")
df_end_point = (df_end_point.diff(-1,axis=1)
.mask(df_end_point.isna().shift(-1,axis=1).fillna(False))
.dropna(how='all',axis=1).reset_index())