根据日期列删除行[Pandas]

时间:2020-08-27 10:02:33

标签: python pandas

我想过滤customer_id's,在此情况下,2019-01-10首先出现在某个日期之后,然后创建一个包含新客户列表的新df df

date          customer_id

2019-01-01    429492
2019-01-01    344343
2019-01-01    949222
2019-01-10    429492
2019-01-10    344343
2019-01-10    129292

输出df

customer_id
129292

这是我到目前为止尝试过的方法,但这也给了我2019年1月10日之前有效的customer_id's

s = df.loc[df["date"]>="2019-01-10", "customer_id"]

df_new = df[df["customer_id"].isin(s)]
df_new

4 个答案:

答案 0 :(得分:0)

Moo foo

答案 1 :(得分:0)

您可以将布尔索引与Series.isin一起使用进行过滤:

df["date"] = pd.to_datetime(df["date"])

mask1 = df["date"]>="2019-01-10"
mask2 = df["customer_id"].isin(df.loc[~mask1,"customer_id"])

df = df.loc[mask1 & ~mask2, ['customer_id']]
print (df)
   customer_id
5       129292

答案 2 :(得分:0)

“然后使用新客户列表创建新的df”,因此在这种情况下,您的输出为null,因为2019-01-10是最后日期,该日期之后没有新客户

但是,如果您想在特定日期或之后获取客户列表:

df=pd.DataFrame({
    'date':['2019-01-01','2019-01-01','2019-01-01',
            '2019-01-10','2019-01-10','2019-01-10'],
    'customer_id':[429492,344343,949222,429492,344343,129292]
})
certain_date=pd.to_datetime('2019-01-10')
df.date=pd.to_datetime(df.date)
df=df[
    df.date>=certain_date
]
print(df)


           date  customer_id
3 2019-01-10       429492
4 2019-01-10       344343
5 2019-01-10       129292

答案 3 :(得分:0)

如果您的'date'列中有日期时间对象,则只需执行以下操作:

df_new = df[df['date'] >= datetime(2019, 1, 10)]['customer_id']

如果您的'date'列不包含日期时间对象,则应首先使用to_datetime方法对其进行转换:

df['date'] = pd.to_datetime(df['date'])

然后应用上述方法。