在python中随机抽样以使用指标值保存到df

问题描述 投票:0回答:1

我是python的新手,我正在尝试在python 3中进行随机抽样,我试图根据它在哪一天选择随机抽样,

df有一堆不同的列,包括date,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().

预先感谢您的帮助!

python pandas
1个回答
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

这会产生你追求的结果吗?

© www.soinside.com 2019 - 2024. All rights reserved.