我有以下删节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
代表年份。我想将end
和end
列扩展到缺少年份的帐户帐户:
years_exp
我一直在研究这个问题大约20个小时,试图“设计工程师”。修复。有没有人知道用于完成此任务的简单Python / Pandas工具/方法?
答案 0 :(得分:1)
这会获取给定end
的第一个years_exp
和id.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