熊猫:插入偶数年的行

时间:2016-04-15 17:05:29

标签: python pandas ipython

我有以下删节dataframe

object-fit

其中df1 = pd.DataFrame({'end': [2007, 2013, 2014, 2013, 2014], 'id.thomas'\ : ['136', '136', '136', '172', '172'], 'years_exp': ['14', '20', '21', \ '14', '15']}, index=[2,3,4,5,6]) end id.thomas years_exp 2 2007 136 14 3 2013 136 20 4 2014 136 21 5 2013 172 14 6 2014 172 15 代表年份。我想将endend列扩展到缺少年份的帐户帐户:

years_exp

我一直在研究这个问题大约20个小时,试图“设计工程师”。修复。有没有人知道用于完成此任务的简单Python / Pandas工具/方法?

2 个答案:

答案 0 :(得分:1)

这会获取给定end的第一个years_expid.thomas字段,然后将这些字段计入最后一年。

final_year = 2014
>>> pd.DataFrame([(year, id_, n) 
                  for id_, end, years_exp in df1.groupby('id.thomas').first().itertuples() 
                  for n, year in enumerate(range(end, final_year + 1), years_exp)], 
                 columns=['end', 'id.thomas', 'years_exp'])
    end  id.thomas  years_exp
0  2007        136         14
1  2008        136         15
2  2009        136         16
3  2010        136         17
4  2011        136         18
5  2012        136         19
6  2013        136         20
7  2014        136         21
8  2013        172         14
9  2014        172         15

答案 1 :(得分:1)

如果years_exp不重要,您可以从groupby构建数据框:

df2 =pd.concat(
   [pd.DataFrame({'id.thomas':id,'end':range(s.min(),s.max()+1)})
                     for (id,s) in df1.groupby('id.thomas').end])

有关

    end id.thomas
0  2007       136
1  2008       136
2  2009       136
3  2010       136
4  2011       136
5  2012       136
6  2013       136
7  2014       136
0  2013       172
1  2014       172