基于日期期间和组的条件

Posted

技术标签:

【中文标题】基于日期期间和组的条件【英文标题】:Conditions based in date periods and groups 【发布时间】:2018-09-20 07:14:03 【问题描述】:
            A    B           C   D
0  2002-01-13  Dan  2002-01-15  10
1  2002-01-13  Dan  2002-01-25  24
2  2002-01-13  Vic  2002-01-17  14
3  2002-01-13  Vic  2002-01-03  18
4  2002-01-28  Mel  2002-02-08  37
5  2002-01-28  Mel  2002-02-06  29
6  2002-01-28  Mel  2002-02-10  20
7  2002-01-28  Rob  2002-02-12  30
8  2002-01-28  Rob  2002-02-01  47

我想为每个B 组创建一个带有下一个条件的新df['E'] 列:

E=D 值,其中A 日期比C 日期晚近10 天。 如果有两个C 日期在距离A 10 天的相同距离处(2002-01-28Mel 的情况),E 将是这些同一时期D 值的平均值。

输出应该是:

            A    B           C   D   E
0  2002-01-13  Dan  2002-01-15  10  24
1  2002-01-13  Dan  2002-01-25  24  24
2  2002-01-13  Vic  2002-01-17  14  14
3  2002-01-13  Vic  2002-01-03  18  14
4  2002-01-28  Mel  2002-02-08  37  33
5  2002-01-28  Mel  2002-02-06  29  33
6  2002-01-28  Mel  2002-02-10  20  33
7  2002-01-28  Rob  2002-02-12  30  30 
8  2002-01-28  Rob  2002-02-01  47  30

【问题讨论】:

你有关于距离有多近的阈值吗? ,对我来说,所有梅尔都应该考虑在附近 2002-01-28 + 10 天 = 2002-02-07。在 Mel 组中不仅有一个最接近 2002-02-07 的值,而且还有两个相同距离的日期,2002-02-08 和 2002-02-06。在这种情况下,E 值为这些行中的 D 均值,即 (37+29)/2=33 我知道了,并添加了解决方案 【参考方案1】:

好的,看来你需要

df['E']=abs((df.C-df.A).dt.days-10)# get the days different 
df['E']=df.B.map(df.loc[df.E==df.groupby('B').E.transform('min')].groupby('B').D.mean())# find the min value for the different , and get the mean 
df
Out[106]: 
           A    B          C   D   E
0 2002-01-13  Dan 2002-01-15  10  24
1 2002-01-13  Dan 2002-01-25  24  24
2 2002-01-13  Vic 2002-01-17  14  14
3 2002-01-13  Vic 2002-01-03  18  14
4 2002-01-28  Mel 2002-02-08  37  33
5 2002-01-28  Mel 2002-02-06  29  33
6 2002-01-28  Mel 2002-02-10  20  33
7 2002-01-28  Rob 2002-02-12  30  30
8 2002-01-28  Rob 2002-02-01  47  30

【讨论】:

以上是关于基于日期期间和组的条件的主要内容,如果未能解决你的问题,请参考以下文章

基于最大日期组的 Django ORM 数据

Linux系统管理之用户和组配置文件

基于条件的偏移日期

SQL:基于另一个表设置条件值,具有 BETWEEN 日期条件

现代信号处理17 - 基于滤波器组的谱估计

基于 1 列和另一组的值合并 2 个 csv 文件