繁体   English   中英

根据 pandas dataframe 中两列的差异创建新行

[英]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列,并删除原始的startend年列:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM