[英]creating new rows from difference of two columns in pandas dataframe
我有一个数据框。
ID value-a value-b start-year end-year
1 10 15 2010 2012
2 20 24 2011 2013
3 10 20 2012 0
我想生成一个新列“年”,这样:从开始年到结束年,每一行都将在全年重复。
ID value-a value-b year
1 10 15 2010
1 10 15 2011
1 10 15 2012
2 20 25 2011
2 20 24 2012
2 20 24 2013
3 10 20 2012
我使用了以下代码,但无法获得正确的 output:
df =pd.concat([pd.DataFrame({'year': pd.date_range(row.start-year, row.end_year, freq='A'),
'value-a': row.value-a,
'value-b': row.value-b,columns=['year','value-a', 'value-b'])
for i, row in df.iterrows()], ignore_index=True)
任何帮助都感激不尽。
如果有0
,则首先将end-year
0
替换为start-year
,在DataFrame.apply
和最后一个DataFrame.explode
中创建range
列,并删除原始的start
和end
年列:
df['end-year'] = df['end-year'].mask(df['end-year'].eq(0), df['start-year'])
df['year'] = df.apply(lambda x: range(x['start-year'], x['end-year'] + 1), axis=1)
df = df.explode('year').drop(['start-year','end-year'], axis=1).reset_index(drop=True)
print (df)
ID value-a value-b year
0 1 10 15 2010
1 1 10 15 2011
2 1 10 15 2012
3 2 20 24 2011
4 2 20 24 2012
5 2 20 24 2013
6 3 10 20 2012
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.