如何将pandas列中的浮点值离散为[1,10]

时间:2019-01-07 18:51:12

标签: python pandas dataframe

我有一个数据框,如何根据列所属的范围将一列中的值转换为相应整数的列表。例如,

test = pd.DataFrame({"price": [0.1, 0.5, 0.2, 0.11, 0.8, 0.3, 0.9, 1.0, 0.47]})
out[1]:
        price
    0   0.10
    1   0.50
    2   0.20
    3   0.11
    4   0.80
    5   0.30
    6   0.90
    7   1.00
    8   0.47

然后,我需要根据值的范围将这些值转换为整数,例如,当x <= 0.1时,使x = 1,当0.1

out[2]:
        price   price_new 
    0   0.10     1          # 0.10 belongs to [0, 0.1] ---> 1
    1   0.50     5          # 0.50 belongs to (0.40, 0.5] ---> 5
    2   0.20     2                .
    3   0.11     2                .
    4   0.80     8                .
    5   0.30     3
    6   0.90     9
    7   1.00     10
    8   0.47     5

我尝试了一些方法,但是效果不佳。请帮忙!非常感谢你!

4 个答案:

答案 0 :(得分:4)

可以用熊猫切

<header class="header" id="header1">

    <div class="row">


        <div class="col-md-6">
            <div class="circle">
                <br>

                <div class="caption">
                    <h2 class="title display-3">Stickers <strong>Personalizados</strong></h2>
                    <p>Lorem m nisi! Eum vitae ipsam veniam, ullam explicabo quaerat asperiores veritatis nam
                        reprehenderit necessitatibus sequi.</p>
                </div>
                <div class="row">
                    <div class="col-md-5">

                        <a href="stickers" class="btn btn-azul text-white btn-block">Comprar</a>

                    </div>

                    <div class="col-md-5 my-home-banner-image">

                        <a href="{% url 'shop:SamplePackPage' %}" class="btn btn-naranja text-white btn-block">Muestras
                        </a>

                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-6">
            <br>
            <img class="" src="https://www.austinhomebrew.com/assets/images/sticke-alt-8989.png" width="440px" height="300px">
        </div>

    </div>

</header>

编辑:使用-和+ inf创建垃圾箱以包含极值。

bins = np.arange(0, 1.1, 0.1)
labels = np.arange(1, 11)
test['price_new'] = pd.cut(test.price, bins = bins, labels = labels)


price   price_new
0   0.10    1
1   0.50    5
2   0.20    2
3   0.11    2
4   0.80    8
5   0.30    3
6   0.90    9
7   1.00    10
8   0.47    5

答案 1 :(得分:1)

为什么不尝试类似的事情:

df['price_new'] = (df['price']*10).round()

答案 2 :(得分:1)

对于此用例,您只需使用舍入功能并缩放数字即可获得所需的输出。

import pandas as pd
df = pd.DataFrame({"price": [0.1, 0.5, 0.2, 0.11, 0.8, 0.3, 0.9, 1.0, 0.47]})
df['price_new'] = df.price.multiply(10).round()
print(df)
#Output:
   price  price_new
0   0.10        1.0
1   0.50        5.0
2   0.20        2.0
3   0.11        1.0
4   0.80        8.0
5   0.30        3.0
6   0.90        9.0
7   1.00       10.0
8   0.47        5.0

答案 3 :(得分:1)

更像是天花板的圆形

np.ceil(df.price.mul(10)).astype(int)
Out[369]: 
0     1
1     5
2     2
3     2
4     8
5     3
6     9
7    10
8     5
Name: price, dtype: int32