我是python的新手,我正在尝试在python 3中进行随机采样,在该示例中,我尝试根据当天是哪一天来选择随机采样,
df有一堆不同的列,其中包含日期,user_id,电话号码等。索引列是0或1,我正尝试仅对那些索引值为0的样本进行随机抽样,最后一个标记为“保留”的列,当前所有数据的标记为“ no_include”
df.loc[(df.date <= '2019-01-02') & (df.date >= '2019-01-01')].loc[0].sample(n=100).replace(to_replace='no_include',value='include')
但是,我想使用这些样本进行随机抽样,并保存替换值,这样,当我查看整个数据集时,我可以看到哪些样本应该被随机抽样,最后一列所有值是'no_include',我想将其中的100个更改为'include',代码可以正常工作,但不会保存到df
我尝试做的另一个是
new = df.loc[(df.date <= '2019-01-02') &
(df.date >= '2019-01-01')].loc[0].sample(100)
然后我只是将所有不同的日期附加在一起,但是不确定如何将不是随机选择的值重新放回
理想情况下,我认为循环是最好的选择,但无法弄清楚
for row in df:
if df.loc[(df.date <= '2019-01-02') & (df.date >= '2019-01-01')].loc[0]:
df.sample(n=100).replace(to_replace='no_include',value='include')
elif df.loc[(df.date <= '2019-01-03') & (df.date >= '2019-01-02')].loc[0]:
df.sample(n=50).replace(to_replace='no_include',value='include')
在没有出现以下错误的情况下,我确实不确定该循环在做什么,但我认为这将是最佳选择
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().
预先感谢您的帮助!
答案 0 :(得分:0)
我确定对此有更好的解决方案,因为我不确定如何不使用索引进行替换,但我希望以下内容对您有用。
我们首先重置索引并将旧索引重命名为“ index _”
df.reset_index(inplace=True)
df.rename(columns={'index': 'index_'}, inplace=True)
这给我们留下了
index_ date_ keep
0 0 2019-01-02 no_include
1 0 2019-01-02 no_include
2 0 2019-01-01 no_include
3 0 2019-01-01 no_include
4 1 2019-01-02 no_include
5 1 2019-01-01 no_include
然后我们可以使用您第一次尝试的代码并保存采样的索引(由于我的6行df,我仅选择了2个)
selected = df[(df.date_ <= '2019-01-02') & (df.date_ >= '2019-01-01') & (df.index_ == 0)].sample(n=2).index
> Int64Index([3, 1], dtype='int64')
然后我们可以遍历这些内容,替换原始数据框中的“保留”列,最后重置索引。
for i in selected:
df.at[i, 'keep'] = 'include'
df.set_index('index_', inplace=True)
这给我们留下了...
date_ keep
index_
0 2019-01-02 no_include
0 2019-01-02 include
0 2019-01-01 no_include
0 2019-01-01 include
1 2019-01-02 no_include
1 2019-01-01 no_include
这会产生您所追求的结果吗?