我有一个ID,年份和值(0或1)的数据框。我想为每个ID创建几行,以填充现有年份之前的2年和现有年份之后的3年。在现有年份之前的另外2年中,该值与现有值相同。对于现有年份之后的年份,该值与现有值相反。例如,对于以下数据框:
ID year value
A 2005 1
B 2006 0
C 2007 1
我想要一个新的数据框,如下所示:
ID year value
A 2003 1
A 2004 1
A 2005 1
A 2006 0
A 2007 0
A 2008 0
B 2004 0
B 2005 0
B 2006 0
B 2007 1
B 2008 1
B 2009 1
C 2005 1
C 2006 1
C 2007 1
C 2008 0
C 2009 0
C 2010 0
下面是我尝试过的。我不确定我的方向正确。
df['year1'] = np.where(df['value'] = 1, 0,1)
df['year2'] = np.where(df['value'] = 1, 0,1)
df_long = pd.melt(df, id_vars= 'ID', var_name = 'year')
答案 0 :(得分:1)
如果您尝试使用map
函数怎么办?
df['year_before'] = df['year'].map(lambda x: str(int(x) - 2))
df['value_before'] = df['value']
df['year_after'] = df['year'].map(lambda x: str(int(x) + 3))
df['value_after'] = df['value'].map(lambda x: 1 - x)