Pandas行日期条件过滤器在Groupby MAXIFS/MINIF之前

2024-04-20 02:47:41 发布

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

我想在熊猫身上做MAXIFS风格的计算

我试图添加一列,其中包含每个唯一标识的下一个(如果存在)和最后一个(如果存在)标记的日期

示例表:(尝试获取下一个标志和最后一个标志列)

Edit:为了形成一个更一般的情况,如果您想对行执行另一个函数,例如ditinctcount在句点上<;=怎么办

这样做的目的是能够应用自定义函数,这些函数只应用于经过筛选的子集,其中每个Id=row Id and Date<;=row Date (我已经创建了与pandas兼容的行函数,但是太慢了)

表格:

Id      Date        Flag    Next Flag   Last Flag   Flag2   UniqueFlags 
1       21-Aug      0       NaN         18-Aug              1
1       20-Aug      0       NaN         18-Aug              1
1       19-Aug      0       NaN         18-Aug              1
1       18-Aug      1       NaN         18-Aug      A       1
1       17-Aug      0       18-Aug      15-Aug              1
1       16-Aug      0       18-Aug      15-Aug              1
1       15-Aug      1       18-Aug      15-Aug      A       1
1       14-Aug      0       15-Aug      NaN                 0
1       13-Aug      0       15-Aug      NaN                 0
2       21-Aug      0       NaN         19-Aug              2
2       20-Aug      0       NaN         19-Aug              2
2       19-Aug      1       NaN         19-Aug      A       2
2       18-Aug      0       19-Aug      15-Aug              1
2       17-Aug      0       19-Aug      15-Aug              1
2       16-Aug      0       19-Aug      15-Aug              1
2       15-Aug      1       19-Aug      15-Aug      B       1
2       14-Aug      0       15-Aug      NaN                 0
2       13-Aug      0       15-Aug      NaN                 0
3       21-Aug      0       NaN         17-Aug              1
3       20-Aug      0       NaN         17-Aug              1
3       19-Aug      0       NaN         17-Aug              1
3       18-Aug      0       NaN         17-Aug              1
3       17-Aug      1       NaN         17-Aug      A       1
3       16-Aug      0       17-Aug      NaN                 0
3       15-Aug      0       17-Aug      NaN                 0
3       14-Aug      0       17-Aug      NaN                 0
3       13-Aug      0       17-Aug      NaN                 0

我尝试过groupby,但无法使它仅用于dates<;=到行日期,同时也针对每个ID

谢谢


Tags: 函数标记ltid示例date风格标志
1条回答
网友
1楼 · 发布于 2024-04-20 02:47:41

试试这个?假设您已经按列Id和{}对这些步骤进行了分解

df['Next Flag']=np.nan
df['Last Flag']=np.nan
df.loc[(df.Flag==1).shift().fillna(False),'Next Flag']=df.Date.shift()
df.loc[(df.Flag==1).fillna(False),'Last Flag']=df.Date
df[['Next Flag','Last Flag']]=df.groupby('Id').agg({'Next Flag':'ffill','Last Flag':'bfill'})


    Id    Date  Flag Next Flag Last Flag
0    1  21-Aug     0       NaN    18-Aug
1    1  20-Aug     0       NaN    18-Aug
2    1  19-Aug     0       NaN    18-Aug
3    1  18-Aug     1       NaN    18-Aug
4    1  17-Aug     0    18-Aug    15-Aug
5    1  16-Aug     0    18-Aug    15-Aug
6    1  15-Aug     1    18-Aug    15-Aug
7    1  14-Aug     0    15-Aug       NaN
8    1  13-Aug     0    15-Aug       NaN
9    2  21-Aug     0       NaN    19-Aug
10   2  20-Aug     0       NaN    19-Aug
11   2  19-Aug     1       NaN    19-Aug
12   2  18-Aug     0    19-Aug    15-Aug
13   2  17-Aug     0    19-Aug    15-Aug
14   2  16-Aug     0    19-Aug    15-Aug
15   2  15-Aug     1    19-Aug    15-Aug
16   2  14-Aug     0    15-Aug       NaN
17   2  13-Aug     0    15-Aug       NaN
18   3  21-Aug     0       NaN    17-Aug
19   3  20-Aug     0       NaN    17-Aug
20   3  19-Aug     0       NaN    17-Aug
21   3  18-Aug     0       NaN    17-Aug
22   3  17-Aug     1       NaN    17-Aug
23   3  16-Aug     0    17-Aug       NaN
24   3  15-Aug     0    17-Aug       NaN
25   3  14-Aug     0    17-Aug       NaN
26   3  13-Aug     0    17-Aug       NaN

编辑:根据你更新的问题

^{pr2}$

相关问题 更多 >