给出如下数据框:
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
条目,我如何删除date
和2019/4/1
的组。
在这种情况下,应删除sh
和hp
的组,因为它仅包含2019/2/1
和2019/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
真诚的感谢您的帮助。
答案 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.transform
和GroupBy.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