2016-04-09 11 views
1

私は個人を表すデータセットを持っており、何年もの顧客でもあります。データは私のパンダのデータフレームにロードされ、迅速な分析ができます。ここフィールドが連続したシーケンスの場合にのみデータを選択

名年 ジョン2012 ジョン2016 ベルン2011 ベルン2012

課題は、わずか2年連続持って名前を特定することです。

私は選択したいです。

名年 ベルン2011 ベルン2012

ジョンは明らかに彼は私たちと彼の年の間に休憩を持っていたとして失格。

ありがとうございました。

大変申し訳ございませんが、テーブルの形状は正しくありません。現時点でモバイルで

答えて

0

私はboolean indexingdiffshiftを使うことができると思います。最後にfilterグループの長さは2です。

print df 

0 John 2012 
1 John 2016 
2 Bern 2011 
3 Bern 2012 
4 Jon 2011 
5 Jon 2012 
6 Jon 2013 


print (df.Year.diff() == 1) | (df.Year.shift(-1).diff() == 1) 
0 False 
1 False 
2  True 
3  True 
4  True 
5  True 
6  True 
Name: Year, dtype: bool 

df1 = df[(df.Year.diff() == 1) | (df.Year.shift(-1).diff() == 1) ] 
print df1 
    Name Year 
2 Bern 2011 
3 Bern 2012 
4 Jon 2011 
5 Jon 2012 
6 Jon 2013 

print df1.groupby('Name').filter(lambda x: len(x) == 2) 
    Name Year 
2 Bern 2011 
3 Bern 2012 
関連する問題