使用字典来键入一系列值

ojp*_*ojp 2 python python-3.x pandas

我有一个熊猫数据框,我想根据另一列的值在新列中创建类别。我可以通过这样做来解决我的基本问题:

range = {
    range(0, 5) : 'Below 5',
    range(6,10): 'between',
    range(11, 1000) : 'above'
}

df['range'] = df['value'].map(range)
Run Code Online (Sandbox Code Playgroud)

在最终的字典键中,我为 range 选择了一个较大的上限值,以确保它捕获我尝试映射的所有值。然而,这似乎是一个丑陋的黑客,我想知道如何在不指定上限的情况下概括这一点。IE。如果 > 10 :“以上”。

谢谢

0 0*_*0 0 5

您可以首先将所有值设置为“above”,然后map()用于其余选项(因此您的rangedict 只有两个项目):

range = {
    range(0, 5) : 'Below 5',
    range(6,10): 'between',

}
df['range'] = 'above'
df['range'] = df['value'].map(range)
Run Code Online (Sandbox Code Playgroud)


Mic*_*erg 5

假设你有一个这样的数据框:

  range value
0   0     0
1   1     1
2   2     2
3   3     3
4   4     4
5   5     5
6   6     6
7   7     7
8   8     8
9   9     9
Run Code Online (Sandbox Code Playgroud)

然后您可以将以下函数应用于列“值”:

def get_value(range):
    if range < 5:
        return 'Below 5'
    elif range < 10:
        return 'Between 5 and 10'
    else:
        return 'Above 10'

df['value'] = df.apply(lambda col: get_value(col['range']), axis=1)
Run Code Online (Sandbox Code Playgroud)

得到你想要的结果。