DataFrame
いくつかの日付範囲の計算を適用したい次のものがあります。(sample_date からの) 一意の人物のサンプル間の日付の差が 8 週間未満である日付フレームの行を選択し、最も古い日付 (つまり、最初のサンプル) の行を保持したいと考えています。
これがデータセットの例です。実際のデータセットは 200,000 レコードを超える場合があります。
labno name sex dob id location sample_date
1 John A M 12/07/1969 12345 A 12/05/2112
2 John B M 10/01/1964 54321 B 6/12/2010
3 James M 30/08/1958 87878 A 30/04/2012
4 James M 30/08/1958 45454 B 29/04/2012
5 Peter M 12/05/1935 33322 C 15/07/2011
6 John A M 12/07/1969 12345 A 14/05/2012
7 Peter M 12/05/1935 33322 A 23/03/2011
8 Jack M 5/12/1921 65655 B 15/08/2011
9 Jill F 6/08/1986 65459 A 16/02/2012
10 Julie F 4/03/1992 41211 C 15/09/2011
11 Angela F 1/10/1977 12345 A 23/10/2006
12 Mark A M 1/06/1955 56465 C 4/04/2011
13 Mark A M 1/06/1955 45456 C 3/04/2011
14 Mark B M 9/12/1984 55544 A 13/09/2012
15 Mark B M 9/12/1984 55544 A 1/01/2012
ユニークな人物とは、名前と生年月日が同じ人物です。たとえば、John A、James、Mark A、および Mark B は一意の人物です。ただし、マーク A の id 値は異なります。
私は通常、手順に R を使用し、名前/DOB の組み合わせに基づいてデータフレームのリストを生成し、各データフレームを sample_date で並べ替えます。次に、リスト適用関数を使用して、各データフレーム内の最初のインデックスと最後のインデックスの日付の差が、最新の日付から 8 週間未満の場合に最も古いものを返すかどうかを判断します。それは永遠にかかります。
python/pandas でこれをどのように試みるかについて、いくつかの指針を歓迎します。まず、name/dob/id を使用して MultiIndex を作成しました。構造は私が望むものに見えます。私がする必要があるのは、R で使用する関数のいくつかを適用して、必要な行を選択することです。で選択してみましdf.xs()
たが、あまりうまくいきません。
これは、パンダに簡単にロードできるデータの辞書です (ただし、列の順序は異なります)。
{'dob': {0: '12/07/1969'、1: '10/01/1964'、2: '30/08/1958'、3: '30/08/1958'、4: '12 /05/1935'、5:'12/07/1969'、6:'12/05/1935'、7:'5/12/1921'、8:'6/08/1986'、9:'4 /03/1992'、10:'1/10/1977'、11:'1/06/1955'、12:'1/06/1955'、13:'9/12/1984'、14:'9 /12/1984'}、'id': {0: 12345、1: 54321、2: 87878、3: 45454、
4:33322、5:12345、6:33322、7:65655、8:65459、9:41211、10:12345、11:56465、12:45456、13:55544、14:55544} 0:1、1:2、2:3、3:4、4:5、5:6、6:7、7:8、8:9、9:10、10:11、11:12、12: 13, 13: 14, 14: 15}, '場所': {0: 'A', 1: 'B', 2: 'A', 3: 'B', 4: 'C', 5: 'A' ', 6: 'A', 7: 'B', 8: 'A', 9: 'C', 10: 'A', 11: 'C', 12: 'C', 13: 'A', 14: 'A'}, 'name': {0: 'John A', 1: 'John B', 2: 'James', 3: 'James', 4: 'Peter', 5: 'John A' 、6:「ピーター」、7:「ジャック」、8:「ジル」、9:「ジュリー」、10:「アンジェラ」、11:「マークA」、
12: 'マーク A', 13: 'マーク B', 14: 'マーク B'}, 'sample_date': {0: '12/05/2112', 1: '6/12/2010', 2: ' 30/04/2012'、3:'29/04/2012'、4:'15/07/2011'、5:'14/05/2012'、6:'23/03/2011'、7:' 15/08/2011'、8:'16/02/2012'、9:'15/09/2011'、10:'23/10/2006'、11:'4/04/2011'、12:' 3/04/2011', 13: '13/09/2012', 14: '1/01/2012'}, '性別': {0: 'M', 1: 'M', 2: 'M' , 3: 'M', 4: 'M', 5: 'M', 6: 'M', 7: 'M', 8: 'F', 9: 'F',
10: 'F', 11 : 'M', 12: 'M', 13: 'M', 14: 'M'}}