【发布时间】:2019-11-30 02:03:02
【问题描述】:
我想创建一个 Total_Damages 的滞后变量。
`Company_name` Year Total_Damages ROA
`ABC` 1996 1111 `2`
`ABC` 1998 2422 `2`
`ABC` 1999 3232 `9`
`ASD` 1996 2132 `1`
`ASD 1997 3444 `12`
`ASD` 1998 200 `1`
`ASD` 1999 1987 `12`
所有变量都需要移到一年后。理想的结果如下所示:
Year `Total_Damages` ROA
1996 `Nan` `2`
1997 `1111` `Nan`
1998 `Nan` `2`
1999 `2422` `Nan`
1999 `Nan` `9`
2000 `3232` `Nan`
1996 `Nan` `1`
1997 `2132` `Nan`
1997 `Nan` `12`
1998 `3444` `Nan`
1998 `Nan` `1`
1999 `200` `Nan`
1999 `Nan` `12`
2000 `1987` `Nan`
我使用了这段代码,但它没有提供想要的结果:
df.loc[:,'Total_Damages_lag'] = df.groupby('Year')['Total_damages'].shift(1)
此外,我使用了以下代码,它确实有效。但是,我的数据框随后变成了一个列表。如果我将其转换回来,则大部分行都会被删除。
grouped_df = df.groupby(df['company_name'])
def lag_by_group(key, value_df):
df = value_df.assign(company_name = key)
return (df.sort_values(by=["Year"], ascending=True).set_index(["Year"]).shift(1))
df = [lag_by_group(g, grouped_df.get_group(g)) for g in grouped_df.groups.keys()]
pd.concat(df, axis=0)
我怎样才能以不同的方式滞后我的变量或解决我的列表问题?
【问题讨论】:
-
您的预期输出与输入完全相同。只需将年份加 1 或将索引移 1。我不遵循计算
-
您的输入非常混乱,因为日期是重复的。但是,stackoverflow.com/questions/58295815/… 应该回答您的问题,如果没有重复(或者有另一列区分重复)。修改年份后与自身合并
-
现在您的预期输出没有意义。你为什么想要那个?
-
我很抱歉。我编辑了我的帖子。希望这可以解决问题。
-
@roganjosh 我有两个变量,即 ROA 和 Total_damages。我只需要滞后 Total_damages。我认为结果会是这样。