2017-01-24 8 views
0

私は、各グループの最初の3行について、値1(第1行)、2(第2行)、3(3行目)。私は以下のようにしています。下のコードでは、新しい変数を作成する方法がわからないので、データセットに既に存在する変数を置き換えているため、新しい変数を作成していません。私のコードはエラーを投げかけませんが、それは私に非常に奇妙な結果を与えています。各グループの最初の3行に値を割り当てる

def func (i): 
    data.loc[data.groupby('ID').nth(i).index,'date'] = i 
func(1) 

お勧めはありますか? ありがとうございました。あなたが重複インデックスを持っていない場合、あなたは、グループごとに行IDを作成する3よりも大きくなっているIDをフィルタリングして、バックデータフレームに割り当てることができ

答えて

1

data['date'] = (data.groupby('ID').cumcount() + 1)[lambda x: x <= 3] 

これが与えます各IDの最初の3行は1,2,3、3を超える行はNaNの値になります。


data = pd.DataFrame({"ID":[1,1,1,1,2,2,3,3,3]}) 
data['date'] = (data.groupby('ID').cumcount() + 1)[lambda x: x <= 3] 
data 

enter image description here

関連する問題