我有一个df,每个公司有4个观察结果(4季度).但是,对于几家公司,我的观察结果不到4次.当我没有公司的四分之三时,我想删除所有与公司相关的观察结果.任何想法如何做到这一点?
这就是df的样子:
Quarter Year Company
1 2018 A
2 2018 A
3 2018 A
4 2018 A
1 2018 B
2 2018 B
1 2018 C
2 2018 C
3 2018 C
4 2018 C
在这个df我想删除相对于公司B的行,因为我只有2个季度.
非常感谢!
最佳答案 对于与原始DataFrame相同大小的系列,使用
transform
和
size
,因此可能的过滤:
df = df[df.groupby('Company')['Quarter'].transform('size') == 4]
#if want check by Companies and years
#df = df[df.groupby(['Company','Year'])['Quarter'].transform('size') == 4]
print (df)
Quarter Year Company
0 1 2018 A
1 2 2018 A
2 3 2018 A
3 4 2018 A
6 1 2018 C
7 2 2018 C
8 3 2018 C
9 4 2018 C
如果性能不重要或小DataFrame使用DataFrameGroupBy.filter
:
df = df.groupby('Company').filter(lambda x: len(x) == 4)