簡體   English   中英

有條件地創建新行

[英]Create new rows conditionally

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

如果您嘗試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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM