gpt4 book ai didi

python - 如何按年份扩展/添加行?

转载 作者:行者123 更新时间:2023-12-02 02:14:25 26 4
gpt4 key购买 nike

我有一个像这样的数据框

df = pd.DataFrame({'grade': ['A','C','B'], 'year': [2018,2015,2017], 'label': [1,2,3]})

grade year label
0 A 2018 1
1 C 2015 2
2 B 2017 3

我想根据年份列(每个标签的最近一年)扩展数据框。基本上,对于每个标签,再生成 4 行以总共覆盖最近 5 年。

预期输出:

print(df_expanded)

grade year label
0 A 2018 1
1 A 2017 1
2 A 2016 1
3 A 2015 1
4 A 2014 1
5 C 2015 2
6 C 2014 2
7 C 2013 2
8 C 2012 2
9 C 2011 2
10 B 2017 3
11 B 2016 3
12 B 2015 3
13 B 2014 3
14 B 2013 3

我尝试过的:

for lab in df['label'].unique():
grp = df.loc[(df['label']==lab)]
yr = grp['year'].iloc[0]
df_year = pd.DataFrame({'year': list(reversed(range(yr-4,yr+1)))})
df_merged = pd.merge(grp, df_year, how='outer', left_on=['year'], right_on=['year'])
df_merged = df_merged.fillna(method='ffill')
df_expanded=pd.concat([df_expanded,df_merged],axis=0)

df_expanded = df_expanded.reset_index(drop=True)
df_expanded['label'] = df_expanded['label'].astype(int)

我的“for循环”方法有效。然而,它在我的实际数据集(包含大约 30000 个标签)上运行速度非常慢。我想知道一定有更好的方法来做到这一点。非常感谢!

最佳答案

你可以尝试:

(pd.concat(df.assign(year=df['year'].sub(i)) for i in range(5))
.sort_index()
.reset_index(drop=True)
)

输出:

   grade  year  label
0 A 2018 1
1 A 2017 1
2 A 2016 1
3 A 2015 1
4 A 2014 1
5 C 2015 2
6 C 2014 2
7 C 2013 2
8 C 2012 2
9 C 2011 2
10 B 2017 3
11 B 2016 3
12 B 2015 3
13 B 2014 3
14 B 2013 3

关于python - 如何按年份扩展/添加行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com