如果熊猫的日期列中未包含特定日期,则删除组

时间:2020-04-23 12:15:56

标签: python-3.x pandas dataframe

给出如下数据框:

  city district      date  price
0   bj       cy  2019/3/1    NaN
1   bj       cy  2019/4/1    6.0
2   sh       hp  2019/2/1    4.0
3   sh       hp  2019/3/1    4.0
4   bj       hd  2019/3/1    7.0
5   bj       hd  2019/4/1    NaN

如果没有city条目,我如何删除date2019/4/1的组。

在这种情况下,应删除shhp的组,因为它仅包含2019/2/12019/3/1的数据。

我想要的输出将是这样的:

  city district      date  price
0   bj       cy  2019/3/1    NaN
1   bj       cy  2019/4/1    6.0
2   bj       hd  2019/3/1    7.0
3   bj       hd  2019/4/1    NaN

真诚的感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用DataFrameGroupBy.filter的解决方案:

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

f = lambda x: x['date'].eq('2019-04-01').any()
df = df.groupby(['city','district']).filter(f)
print (df)
  city district       date  price
0   bj       cy 2019-03-01    NaN
1   bj       cy 2019-04-01    6.0
4   bj       hd 2019-03-01    7.0
5   bj       hd 2019-04-01    NaN

使用GroupBy.transformGroupBy.any的快速解决方案:

df = (df[df.assign(t = df['date'].eq('2019-04-01'))
           .groupby(['city','district'])['t'].transform('any')])
print (df)
  city district       date  price
0   bj       cy 2019-03-01    NaN
1   bj       cy 2019-04-01    6.0
4   bj       hd 2019-03-01    7.0
5   bj       hd 2019-04-01    NaN