我想创建一个滞后变量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年。你知道吗
对于下半部分,我们增加年份,并将非滞后列设置为null(本例中为ROA)
最后,将数据帧连接在一起,并对索引进行排序,以获得彼此相邻的正确行。你知道吗
您可以使用以下代码:
相关问题 更多 >
编程相关推荐