操纵pandas数据帧 - 有条件的

问题描述 投票:0回答:1

我有一个像这样的pandas数据框:

ID    Date         Event_Type
1     01/01/2019   A
1     01/01/2019   B
2     02/01/2019   A
3     02/01/2019   A

我想留下:

ID    Date
1     01/01/2019
2     02/01/2019
3     02/01/2019

我的条件是:如果ID是相同的并且dates在彼此的2天内,则丢弃其中一行。但是,如果日期间隔超过2天,则保留两行。

我该怎么做呢?

python-3.x pandas
1个回答
3
投票

我相信您需要首先通过to_datetime将值转换为日期时间,然后获取diff并通过isnull()获取每组的第一个值,并将其与下一个值更高的时间相比,如timedelta阈值:

df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

s =  df.groupby('ID')['Date'].diff()
df = df[(s.isnull() | (s > pd.Timedelta(2, 'd')))]
print (df)
   ID       Date Event_Type
0   1 2019-01-01          A
2   2 2019-02-01          A
3   3 2019-02-01          A

使用其他数据检查解决方案

print (df)
   ID        Date Event_Type
0   1  01/01/2019          A
1   1  04/01/2019          B <-difference 3 days
2   2  02/01/2019          A
3   3  02/01/2019          A

df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

s =  df.groupby('ID')['Date'].diff()
df = df[(s.isnull() | (s > pd.Timedelta(2, 'd')))]
print (df)
   ID       Date Event_Type
0   1 2019-01-01          A
1   1 2019-01-04          B
2   2 2019-01-02          A
3   3 2019-01-02          A
© www.soinside.com 2019 - 2024. All rights reserved.