根据条件从熊猫系列中随机删除元素

时间:2020-07-05 16:22:42

标签: python pandas

我有一个带有约1.5亿个浮点元素的熊猫系列。我试图随机删除其值位于特定范围(例如-0.1至0.1)之间的所有元素的50%。

通常我会(1)从系列中创建一个数据框; (2)增加一列随机数; (3)删除那些满足第一个条件(在-0.1和0.1之间)并且其随机数在较低的第20个百分位数中的行。但是,这样做会使我的PC的内存饱和,无法正常工作,因此我试图找到一种无需过多操作即可直接从该系列中完成此操作的方法。

例如,我有类似的东西(但实际上更大):

0            0.05
1            -0.05
2            0.03
3            0.12
4            0.03
5            -0.2
6            -0.05
7            0.13
8            -0.2
9            0
Length: 10, dtype: float64

我试图将所有值的50%随机丢弃在-0.1和0.1之间,这将给出如下输出:

0            0.05
3            0.12
4            0.03
5            -0.2
6            -0.05
7            0.13
8            -0.2

有什么方法可以直接从系列中进行而无需太多操作?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是仅处理索引的一种方式:

function getmyDate(no) {
    d = new Date();
    year = d.getFullYear();
    month = d.getMonth() + 1;
    day = d.getDate();
    document.getElementById("mydate"+no).innerHTML = day + "/" + month + "/" + year;
    }

输出:

m = ((df > -.1) & (df < .1))
idx = df.loc[~m].index.union(df.loc[m].sample(frac=.5).index)
df[idx]

详细信息:创建一个布尔序列,其中m满足要从中采样和删除的行的条件。将布尔序列的倒数与真实值的50%的样本合并在一起,并使用该新序列对原始序列进行布尔索引。