基于日期期间和组的条件
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']
列:
A
日期比C
日期晚近10 天。
如果有两个C
日期在距离A
10 天的相同距离处(2002-01-28
Mel
的情况),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
【讨论】:
以上是关于基于日期期间和组的条件的主要内容,如果未能解决你的问题,请参考以下文章