我有以下数据库:
firm sic identifier name year X Y Z
1078 2834.0 002824100 ABBOTT LABORATORIES 2013 4.347826 5.217391 15.739130
1078 2834.0 002824100 ABBOTT LABORATORIES 2014 4.368421 6.263158 16.684211
112178 2836.0 00339B107 ABGENIX INC 2005 5.222222 3.111111 9.777778
112178 2836.0 00339B107 ABGENIX INC 2006 5.222222 4.111111 10.777778
178855 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2007 4.000000 0.000000 13.544322
我的意图是将每个组的年份变量向后延长 5 年。公司、原文、标识符和名称列将需要复制到新行。但是,X、Y 和 Z 列将为 NAN。
预期结果:
firm sic identifier name year X Y Z
1078 2834.0 002824100 ABBOTT LABORATORIES 2008 NAN NAN NAN
1078 2834.0 002824100 ABBOTT LABORATORIES 2009 NAN NAN NAN
1078 2834.0 002824100 ABBOTT LABORATORIES 2010 NAN NAN NAN
1078 2834.0 002824100 ABBOTT LABORATORIES 2011 NAN NAN NAN
1078 2834.0 002824100 ABBOTT LABORATORIES 2012 NAN NAN NAN
1078 2834.0 002824100 ABBOTT LABORATORIES 2013 4.347826 5.217391 15.739130
1078 2834.0 002824100 ABBOTT LABORATORIES 2014 4.368421 6.263158 16.684211
112178 2836.0 00339B107 ABGENIX INC 2000 NAN NAN NAN
112178 2836.0 00339B107 ABGENIX INC 2001 NAN NAN NAN
112178 2836.0 00339B107 ABGENIX INC 2002 NAN NAN NAN
112178 2836.0 00339B107 ABGENIX INC 2003 NAN NAN NAN
112178 2836.0 00339B107 ABGENIX INC 2004 NAN NAN NAN
112178 2836.0 00339B107 ABGENIX INC 2005 4.454545 3.181818 11.000000
112178 2836.0 00339B107 ABGENIX INC 2006 4.222222 4.000000 13.555556
178855 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2007 NAN NAN NAN
178855 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2007 NAN NAN NAN
178855 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2007 NAN NAN NAN
178855 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2007 NAN NAN NAN
178855 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2007 NAN NAN NAN
178855 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2007 4.000000 0.000000 13.544322
如果您对如何在 python 中实现它有一些想法,请与我分享。
提前致谢。
请您参考如下方法:
您可以使用index.repeat 和merge
f = df.groupby('firm').first()
d = f.loc[f.index.repeat(5)]
d.assign(year=d.year+np.tile(np.arange(-5, 0), len(f)),
X=np.nan,
Y=np.nan,
Z=np.nan)\
.merge(df.set_index('firm'), how='outer')\
.sort_values(['identifier', 'year'])
sic identifier name year X Y Z
0 2834.0 002824100 ABBOTT LABORATORIES 2008 NaN NaN NaN
1 2834.0 002824100 ABBOTT LABORATORIES 2009 NaN NaN NaN
2 2834.0 002824100 ABBOTT LABORATORIES 2010 NaN NaN NaN
3 2834.0 002824100 ABBOTT LABORATORIES 2011 NaN NaN NaN
4 2834.0 002824100 ABBOTT LABORATORIES 2012 NaN NaN NaN
15 2834.0 002824100 ABBOTT LABORATORIES 2013 4.347826 5.217391 15.739130
16 2834.0 002824100 ABBOTT LABORATORIES 2014 4.368421 6.263158 16.684211
5 2836.0 00339B107 ABGENIX INC 2000 NaN NaN NaN
6 2836.0 00339B107 ABGENIX INC 2001 NaN NaN NaN
7 2836.0 00339B107 ABGENIX INC 2002 NaN NaN NaN
8 2836.0 00339B107 ABGENIX INC 2003 NaN NaN NaN
9 2836.0 00339B107 ABGENIX INC 2004 NaN NaN NaN
17 2836.0 00339B107 ABGENIX INC 2005 5.222222 3.111111 9.777778
18 2836.0 00339B107 ABGENIX INC 2006 5.222222 4.111111 10.777778
10 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2002 NaN NaN NaN
11 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2003 NaN NaN NaN
12 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2004 NaN NaN NaN
13 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2005 NaN NaN NaN
14 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2006 NaN NaN NaN
19 2836.0 00383Y102 ABRAXIS BIOSCIENCE INC 2007 4.000000 0.000000 13.544322
