【发布时间】:2019-08-17 00:36:53
【问题描述】:
我正在应用 .sample 并将 random_state 设置为常量,在使用 set_index 之后它开始选择不同的行。先前包含在子集中的已删除成员。我不确定播种如何选择行。这有意义还是出了什么问题?
这是做了什么:
df.set_index('id',inplace=True, verify_integrity=True)
df_small_F = df.loc[df['gender']=='F'].apply(lambda x: x.sample(n=30000, random_state=47))
df_small_M = df.loc[df['gender']=='M'].apply(lambda x: x.sample(n=30000, random_state=46))
df_small=pd.concat([df_small_F,df_small_M],verify_integrity=True)
当我按索引对 df_small 进行排序并打印时,它会产生不同的结果。
【问题讨论】:
-
你能分享你的部分代码吗?
-
是的,数据框正在被读取,而不是在其他任何地方创建。我有 df 形状的打印件作为检查。
-
我不确定我是否理解。使用 set_index 我将索引更改为使用“id”列作为值。 .sort_index 应该按“id”排序吧?我遇到的问题是 .sample 每次我重新运行数据时都会选择不同的行,包括从源中提取数据。什么都没有改变。我的问题是,样本是否不使用索引,而是使用其他一些措施来根据种子选择行?
-
在您的示例中,示例使用的唯一参数是采样的
df、random_state和n的长度。如果那些没有改变,它选择的行将不会改变,无论索引如何。您发现的行为不是它应有的行为方式,我无法重现您的问题,因此可能存在与sample无关的错误。请向minimal reproducible example 提供重现问题的示例数据,并且在尝试这样做时,您可能会在代码中发现问题。 stackoverflow.com/questions/20109391/… 展示了如何用数据给出好的例子。 -
问题已由另一方解决。每次运行时读取的数据的顺序都会发生变化,并在执行采样修复之前按索引对其进行排序。问题是关于播种如何与 .sample() 相关,而不仅仅是采样参数。更改影响 .sample() 的排序,我认为它是 random_state 选择行的方式,这是我的主要问题。它选择的行确实发生了变化,尽管 .sample() 的参数没有改变,就像我问的那样。
标签: python python-3.x pandas random-seed