确定数据框中的新行

时间:2017-09-13 13:02:34

标签: python pandas

在Python中,我有一个SQlite数据库,其中包含一个包含事件列表的表。

专栏:

EventName 
StartDate 
EndDate   
DateAdded

可以在多天内将相同的事件添加到表中。该表每天刷新一次。

我需要每天通过比较当天添加的事件和前几天添加的事件来确定是否有任何新事件。

我想我可以编写SQL来实现这个目标:

SELECT e.EventName ,
       e.StartDate ,
       e.EndDate   ,
       e.DateAdded
FROM   Events AS e
WHERE  e.DateAdded = '2017-09-13'
       AND NOT EXISTS (   SELECT e2.EventName ,
                                 e2.StartDate ,
                                 e2.EndDate   ,
                                 e2.DateAdded ,
                                 e2.EventName
                          FROM   Events AS e2
                          WHERE  e2.DateAdded < '2017-09-13'
                                 AND e2.EventName = e.EventName
                      );

我想知道是否有办法在没有SQL的情况下执行此操作,即使用pandas或任何其他数据结构? 我问的原因是代码多次引用SQL数据,我在想是否可以查询数据库一次然后对原位数据进行操作,那么资源密集程度就会降低。

示例数据:

EventName   Startdate    EndDate     DateAdded
Liverpool   2017-07-01   2017-07-10  2017-09-01
Manchester  2017-08-01   2017-08-20  2017-09-01
Liverpool   2017-07-01   2017-07-10  2017-09-02
Manchester  2017-08-01   2017-08-20  2017-09-02
London      2017-10-01   2017-10-10  2017-09-02

如果在2017-09-02上运行,我想返回最后一行:

London      2017-10-01   2017-10-10  2017-09-02

1 个答案:

答案 0 :(得分:1)

如果您将现有SQL表读入pandas DataFrame df并将新记录读入DataFrame new_df,则可以使用以下命令添加旧记录的连接新记录:

df = pd.concat([df, new_df])

...然后通过使用df标记df中的所有非唯一行,然后在索引操作中取消这些行,将df.duplicated(keep=False)仅过滤到新行:

df = df[~df.duplicated(keep=False)]
然后

df将只包含唯一的行(即SQL表新增的行)。