pandas 删除组/id和相应的行,从一个datrame基于一定的条件

xqk2d5yq  于 2023-04-04  发布在  其他
关注(0)|答案(2)|浏览(73)

我有以下 Dataframe :

#Load the required libraries
import pandas as pd

#Create dataset
data = {'id': [1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1,
               2, 2,
               3, 3, 3, 3, 3, 3,
               4, 4, 4,
               5, 5, 5, 5, 5,5, 5, 5,5],
        'cycle': [1,2, 3, 4, 5,6,7,8,9,10,11,
                  1,2, 
                  1,2, 3, 4, 5,6,
                  1,2, 3,
                  1,2, 3, 4, 5,6,7,8,9,],
        'Salary': [7, 7, 7,8,9,10,11,12,13,14,15,
                   4, 4,
                   8,9,10,11,12,13,
                   8,9,10,
                   7, 7,9,10,11,12,13,14,15,],
        'Children': ['No', 'Yes', 'Yes', 'Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No',
                     'Yes', 'Yes', 
                     'No','Yes', 'Yes', 'No','No', 'Yes',
                     'Yes', 'Yes', 'Yes',
                      'No',  'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No',],
        'Days': [123, 128, 66, 66, 120, 141, 52,96, 120, 141, 52,
                 96, 120,
                 15,123, 128, 66, 120, 141,
                 141,123, 128,
                 123, 128, 66, 123, 128, 66, 120, 141, 52,],
        }

#Convert to dataframe
df = pd.DataFrame(data)
print("df = \n", df)

上面的dataframe看起来是这样的:

这里,每个id根据“cycle”列具有不同的周期。
id-1具有最大11个周期。
id-2具有最大2个周期。
ID-3具有最大6个周期。
ID-4具有最大3个周期。
ID-5具有最大9个周期。
我对'cycles'有一定的阈值限制。假设cycle_threshold = 3
如果最大循环且id〈= cycle_threshold,则删除整个组/id
比如说
对于id-2和id-4,由于最大循环数分别为2和3,因此将从 Dataframe 中删除id和相应的行
但是,组的其余部分/id保持不变。
结果如下所示:

有人能告诉我如何在Python中实现这个任务吗?

kupeojn6

kupeojn61#

使用boolean indexingGroupBy.transform创建的掩码,将值聚合到具有与原始DataFrame相同索引的Series,因此可以通过Series.gt进行比较,以过滤更大的值,这与通过阈值删除相等或更小的值相同:

cycle_threshold = 3

df1 = df[df.groupby('id')['cycle'].transform('max').gt(cycle_threshold)]

另一个想法:
x一个一个一个一个x一个一个二个x

ie3xauqp

ie3xauqp2#

IIUC,你可以进行groupby和筛选

out = df.groupby('id').filter(lambda g: g['cycle'].max() > 3)
print(out)

    id  cycle  Salary Children  Days
0    1      1       7       No   123
1    1      2       7      Yes   128
2    1      3       7      Yes    66
3    1      4       8      Yes    66
4    1      5       9      Yes   120
5    1      6      10       No   141
6    1      7      11       No    52
7    1      8      12      Yes    96
8    1      9      13      Yes   120
9    1     10      14      Yes   141
10   1     11      15       No    52
13   3      1       8       No    15
14   3      2       9      Yes   123
15   3      3      10      Yes   128
16   3      4      11       No    66
17   3      5      12       No   120
18   3      6      13      Yes   141
22   5      1       7       No   123
23   5      2       7      Yes   128
24   5      3       9       No    66
25   5      4      10       No   123
26   5      5      11      Yes   128
27   5      6      12      Yes    66
28   5      7      13      Yes   120
29   5      8      14      Yes   141
30   5      9      15       No    52

相关问题