有条件地创建新行

时间:2020-10-13 18:12:51

标签: python

我有一个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')

1 个答案:

答案 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)