如何用pandas数据帧中的范围替换列值

TTa*_*Taa 4 python range conditional-statements dataframe pandas

我有一个名为'df'的数据框,我想用一个数据框中的列范围内的值替换另一列中的相应值.

  1. 6 <=年龄<11然后1

    11 <=年龄<16然后2

    16 <=年龄<21然后3

    21岁<=年龄4岁

            age
    86508   12.0
    86509   6.0
    86510   7.0
    86511   8.0
    86512   10.0
    86513   15.0
    86514   15.0
    86515   16.0
    86516   20.0
    86517   23.0
    86518   23.0
    86519   7.0
    86520   18.0
    
    Run Code Online (Sandbox Code Playgroud)

结果是

            age    stage
    86508   12.0    2
    86509   6.0     1    
    86510   7.0     1
    86511   8.0     1
    86512   10.0    1
    86513   15.0    2
    86514   15.0    2
    86515   16.0    2
    86516   20.0    3
    86517   23.0    4
    86518   23.0    4
    86519   7.0     1
    86520   18.0    3
Run Code Online (Sandbox Code Playgroud)

谢谢.

Max*_*axU 6

使用pd.cut():

In [37]: df['stage'] = pd.cut(df.age, bins=[0,11,16,21,300], labels=[1,2,3,4])

In [38]: df
Out[38]:
        age stage
86508  12.0     2
86509   6.0     1
86510   7.0     1
86511   8.0     1
86512  10.0     1
86513  15.0     2
86514  15.0     2
86515  16.0     2
86516  20.0     3
86517  23.0     4
86518  23.0     4
86519   7.0     1
86520  18.0     3
Run Code Online (Sandbox Code Playgroud)

或者@ayhan提供的更通用的解决方案:

In [39]: df['stage'] = pd.cut(df.age, bins=[0, 11, 16, 21, np.inf], labels=False, right=True) + 1

In [40]: df
Out[40]:
        age  stage
86508  12.0      2
86509   6.0      1
86510   7.0      1
86511   8.0      1
86512  10.0      1
86513  15.0      2
86514  15.0      2
86515  16.0      2
86516  20.0      3
86517  23.0      4
86518  23.0      4
86519   7.0      1
86520  18.0      3
Run Code Online (Sandbox Code Playgroud)

  • `pd.cut(df.age, bins=[0, 11, 16, 21, np.inf], labels=False, right=True) + 1` 可能更通用(对于 bins 和标签)。 (2认同)