日期范围分组数据帧中的重叠



如何知道两行的日期范围是否重叠??

输入数据帧:

开始>时间戳<2021-05-17><2021-05-16><2021-05-16><2021-05-12><2021-05-16><2021-05-17>
A B结束
A1 B1 2022-01-15 2021-05-17
A1 B1 2021-07-15 2021-10-17
A1 B1 2021-07-30 2021-10-02
A1 B2 2022-01-01 2023-01-01 2021-05-17
A1 B2 2021-06-02 2021:06-04
A2 B3 2021-05-102021:05-17
A2 B3 2021-04-10 2021:06-12
A2 B4 2021-06-02 2021:06-04

您可以使用:

  1. 如果日期不在datetime中,可以选择将日期转换为datetime
df['Start'] = pd.to_datetime(df['Start'])
df['End'] = pd.to_datetime(df['End'])
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
  1. 对值进行排序,以便于在连续行之间进行日期比较
df = df.sort_values(['A', 'B', 'Start', 'End'])
  1. 为非重叠的日期范围设置相同AB内的组号:通过比较排序行中的Start日期大于前一行的End日期(这将是非重叠日期范围(。所有的组号都是相对于CCD_ 5和CCD_
group = (df['Start'] >  df.groupby(['A', 'B'])['End'].shift()).groupby([df['A'], df['B']]).cumsum()
  1. 根据AB以及重叠组号(根据新创建的group(进行分组,并通过idxmax()获得最高Timestamp的索引。使用.loc筛选要保留的此类行(组中Timestamp最高(。最后用.sort_index()恢复排序前的原始数据帧序列
df.loc[df.groupby([df['A'], df['B'], group])['Timestamp'].idxmax()].sort_index()

结果:

A   B      Start        End  Timestamp
0  A1  B1 2022-01-15 2022-02-15 2021-05-17
1  A1  B1 2021-07-15 2021-10-17 2021-05-17
3  A1  B2 2022-01-01 2023-01-01 2021-05-17
4  A1  B2 2021-06-02 2021-06-04 2021-05-16
5  A2  B3 2021-05-10 2021-05-12 2021-05-17
7  A2  B4 2021-06-02 2021-06-04 2021-05-17

Panda数组将对您有所帮助事情是这样的。。。数组(data[,dtype,copy](。。。

欲了解更多信息,请阅读文档。。。。我仍在寻找稳定的答案。

Panda文档

相关内容

  • 没有找到相关文章

最新更新