如果给定日期差(天)中不存在值,Python将删除ID行

2024-06-17 17:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

如果提供了ID、指示符和Datediff行,我如何根据行Datediff删除没有28天或之前的Y指示符的任何ID?谢谢你的帮助,谢谢

df = pd.DataFrame({'ID':[111, 111, 111, 112, 112, 112, 113, 114, 114, 115,
                                                                 115],
                   'Indicator':['N', 'Y', 'N', 'N', 'N', 'Y', 'Y', 'Y',
                                                         'N', 'Y', 'N'],
                   'Dateddiff': [0, 10, 34, 0, 0, 28, 29, 0, 28, 30, 34]})

输入

ID   Indicator Datediff
111  N         0
111  Y         10
111  N         34
112  N         0
112  N         0
112  Y         28
113  Y         29  
114  Y         0
114  N         28
115  Y         30
115  N         34

输出

ID   Indicator Datediff
111  N         0
111  Y         10
111  N         34
112  N         0
112  N         0
112  Y         28 
114  Y         0
114  N         28

2条回答

谢谢你的进一步解释。您可以找到指示符号为“Y”且Dateddiff>;28然后,您可以通过反转(~.isin()删除这些ID:

bad_ids = df['ID'][(df['Indicator'] == 'Y') & (df['Dateddiff'] > 28)]
df = df[~df['ID'].isin(bad_ids)]

输出:

    ID Indicator  Dateddiff
0  111         N          0
1  111         Y         10
2  111         N         34
3  112         N          0
4  112         N          0
5  112         Y         28
7  114         Y          0
8  114         N         28

试试这个

df_final = df[~(df.Indicator.eq('Y') 
                & df.Dateddiff.gt(28)).groupby(df.ID).transform('any')]

Out[37]:
    ID Indicator  Dateddiff
0  111         N          0
1  111         Y         10
2  111         N         34
3  112         N          0
4  112         N          0
5  112         Y         28
7  114         Y          0
8  114         N         28

相关问题 更多 >