【发布时间】:2021-06-23 11:17:41
【问题描述】:
问题如下:
言辞:
对于数据框中的每个 id,从变量“date1”中的所有日期到变量“date2”中的所有日期,获取最高的日期,一旦获得最高日期,使用它来查找“var1”的值" 和 "var2" 并将这两个除以得到一个新变量 "var3",推断该变量以使用您获得的值填充每个 id 的所有行(每个 id 的每个值都不同)。
视觉上: 这是数据集“df”:
ID date1 date2 var1 var2
0 1 2017-11-29 2017-12-12 50 60
1 1 2017-12-04 2017-12-12 57 34
2 1 2017-12-15 2017-12-12 43 55
3 1 2018-01-12 2017-12-12 11 75
4 2 2019-03-11 2019-03-27 33 73
5 2 2019-03-25 2019-03-27 22 71
6 2 2019-03-28 2019-03-27 54 70
7 2 2019-05-21 2019-03-27 35 55
8 3 2017-09-05 2017-09-23 67 78
9 3 2017-09-22 2017-09-23 72 71
所以,基本上
例如对于 ID 1:当“date1”
ID date1 date2 var1 var2 var3
0 1 2017-11-29 2017-12-12 50 60 1.67
1 1 2017-12-04 2017-12-12 57 34 1.67
2 1 2017-12-15 2017-12-12 43 55 1.67
3 1 2018-01-12 2017-12-12 11 75 1.67
想法不是得到一个groupby数据帧,而是原始数据帧。
我的尝试:
max_date = df.groupby('id').apply(lambda x: x.loc[x['date1']<x['date2'],'date1'].max()))
max_date.name = "max_date"
df = pd.merge(df,max_date,"left",left_on="id",right_index=True)
var3_var1 = df.groupby('id').apply(lambda x: x.loc[x['date1']==x['date2'],"var1"])
var3_var2 = df.groupby('id').apply(lambda x: x.loc[x['date1']==x['date2'],"var2"])
var3 = var3_var1/var3_var2
var3.name = "var3"
df = pd.merge(df,var3,"left",left_on="id",right_index=True)
代码没有完全正常工作,但它正在接近,我的主要问题是使用merge,因为我将丢失id 列,我知道我可以简单地重新附加索引,但总体上使用代码以上似乎不是一个好的解决方案。
【问题讨论】:
-
ID2 和 3 没有任何 date1
-
是的,抱歉,这只是更多行的摘录,我会更改它以避免任何混淆
标签: python pandas dataframe pandas-groupby