Python 如果标识符在范围内,则选择列车数据
我有83家公司的数据库。我选择80%的公司作为具有以下代码的列车组:Python 如果标识符在范围内,则选择列车数据,python,pandas,numpy,Python,Pandas,Numpy,我有83家公司的数据库。我选择80%的公司作为具有以下代码的列车组: mask = np.random.rand(83) <0.8 df['gvkey'].drop_duplicates()[mask] The outcome: 24 2086 48 3011 76 5020 88 6266 100 6730 ... 880 156617 890 157954 902 160607 917
mask = np.random.rand(83) <0.8
df['gvkey'].drop_duplicates()[mask]
The outcome:
24 2086
48 3011
76 5020
88 6266
100 6730
...
880 156617
890 157954
902 160607
917 164266
926 264414
Name: gvkey, Length: 67, dtype: int64
感谢您的帮助。您可以使用在通过删除重复项获得的唯一gvkey上仅选择67个gvkey,然后使用和astype
获得1(如果gvkey位于样本的67中),否则为0
df['train'] = df['gvkey'].isin(df['gvkey'].drop_duplicates()
.sample(n=67).to_numpy()).astype(int)
请注意,在sample
中,可以使用frac=0.8
而不是n=67
,但在这种情况下,它只选择66个值
编辑:很抱歉,我把事情弄混了,意识到你想要的是训练和测试,而不是1和0,所以类似,你可以这样做
df['train'] = np.where(df['gvkey'].isin(df['gvkey'].drop_duplicates()
.sample(n=67).to_numpy()),
'train','test')
也就是说,在本列中包含1或0以后会更容易使用。您可以使用在使用删除重复项获得的唯一gvkey上仅选择67个gvkey,然后使用和astype
获得1(如果gvkey位于样本的67中),否则为0
df['train'] = df['gvkey'].isin(df['gvkey'].drop_duplicates()
.sample(n=67).to_numpy()).astype(int)
请注意,在sample
中,可以使用frac=0.8
而不是n=67
,但在这种情况下,它只选择66个值
编辑:很抱歉,我把事情弄混了,意识到你想要的是训练和测试,而不是1和0,所以类似,你可以这样做
df['train'] = np.where(df['gvkey'].isin(df['gvkey'].drop_duplicates()
.sample(n=67).to_numpy()),
'train','test')
也就是说,在本专栏中使用1或0以后会更容易使用。谢谢Ben,它完全满足了我的需要。第一个0和1就足够了。我只需要区分两者。谢谢Ben,这正是我想要的。第一个0和1就足够了。我只需要区分两者。