2016-04-15 28 views
1

の行を挿入:endは年を代表するパンダ:私は要約<a href="https://github.com/108michael/ms_thesis/blob/master/yearsofserv" rel="nofollow">dataframe</a>次しても数年

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 

。私は不足している年間のアカウントを考慮してendyears_exp列を拡大したいと思います:私は「エンジニア」修正しようと、約20時間のためにこれに取り組んできました

end  id.thomas years_exp 
2 2007 136   14 
3 2008 136   15 
4 2009 136   16 
5 2010 136   17 
6 2011 136   18 
7 2012 136   19 
8 2013 136   20 
9 2014 136   21 
10 2013 172   14 
11 2014 172   15 

。誰もがこのタスクを達成するための単純なPython/Pandasツール/メソッドを知っていますか?

+1

については

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

を使用すると、インデックス順を気にしますか? 'id.thomas'列と 'years_exp'列が計算されていますか、空であることは間違いありませんか? –

+0

@Nathan Clement:お返事ありがとうございます。私はインデックスの順序については気にしない。 'id.thomas'が維持されることが重要です。 'years_exp'は操作からの私の主な離陸です。後で別のデータベースにマージされます。 'years_exp'はすでに別の[dataframe](https://github.com/108michael/ms_thesis/blob/master/yearsofserv)から計算されています –

+1

基本的には、開始する行の「終了」範囲を変更することです最初の年と最後の年で終了しますが、何年もスキップしませんか? –

答えて

1

これは、特定のid.thomasの最初のendフィールドとyears_expフィールドを取り、これらのフィールドを最後の年に列挙します。

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 
+0

アレクサンダーようこそありがとう!私は文字どおり渡ります。私は短い昼寝の後にこれを実装し、あなたの実用的な解決策を認めて結果を確認することに気をつけてください。あなたの時間と援助ありがとう! –

+1

それは非常に長い昼寝でした... – Alexander

+0

有罪として有罪。私はあなたのコードを適用しましたが、 'name 'final_year'が定義されていません 'というエラーが出ました。また、この努力は、もともと考えていたより少し複雑になってきました。別の質問をするつもりです。 –

1

years_expの場合は、まだ、重要ではありません、あなただけのGROUPBYからのデータフレームを構築することができます:

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 
関連する問題

 関連する問題