3 回答
TA贡献1810条经验 获得超4个赞
我认为你需要fillna在你的groupby.
df[["var1", "var2"]] = df[["var1", "var2"]].fillna(df.groupby(['date', 'building'])[["var1", "var2"]].ffill())
date building var1 var2 var3 var4
0 2019-01-01 a 1.5 100.0 10.0 1
1 2019-01-01 a 1.5 110.0 11.0 2
2 2019-01-01 b 2.1 105.0 NaN 3
3 2019-01-01 b 2.2 105.0 NaN 4
4 2019-02-01 a 1.2 102.0 NaN 5
5 2019-02-01 a 1.3 102.0 NaN 6
6 2019-02-01 b 2.4 103.0 NaN 7
7 2019-02-01 b 2.4 107.0 NaN 8
TA贡献1801条经验 获得超8个赞
反复执行:
gb = df.groupby(['date', 'building'])
for g in ["var1", "var2"]:
df[g] = gb[g].ffill()
date building var1 var2 var3 var4
0 2019-01-01 a 1.5 100.0 10.0 1
1 2019-01-01 a 1.5 110.0 11.0 2
2 2019-01-01 b 2.1 105.0 NaN 3
3 2019-01-01 b 2.2 105.0 NaN 4
4 2019-02-01 a 1.2 102.0 NaN 5
5 2019-02-01 a 1.3 102.0 NaN 6
6 2019-02-01 b 2.4 103.0 NaN 7
7 2019-02-01 b 2.4 107.0 NaN 8
TA贡献1785条经验 获得超8个赞
@Gaurav Bansal 在数据框中拟合 group by 时,您只是缺少几列。
df[['date', 'building','var1', 'var2']] = df.groupby(['date', 'building'])[['var1', 'var2']].ffill()
Group by 将返回四列数据框,即“日期”、“建筑”、“var1”和“var2”,或者您可以只提供一个数据框来存储操作的数据框。
因此,您需要将其存储到一个四列 df 中,以便与返回的键值完美匹配。
添加回答
举报
