【问题标题】:How to create new column based on value in a set of columns如何根据一组列中的值创建新列
【发布时间】:2023-04-05 10:47:01
【问题描述】:

我有一个这样的熊猫 df:

time   a    b    c  
1      0    1    0
1      0    1    0
1      1    0    0
1      0    1    0
1      0    0    1
1      0    0    0

我想根据以下逻辑创建一个新列df.code

  • 如果 df.a == 1,则返回 4
  • 如果 df.b == 1,则返回 2
  • 如果 df.c == 1,则返回 1
  • 如果 a、b 或 c != 1,则返回 0
time   a    b    c    code  
1      0    1    0     2
1      0    1    0     2 
1      1    0    0     4
1      0    1    0     2
1      0    0    1     1
1      0    0    0     0

我该怎么做?我实际上是在尝试将选择的虚拟列压缩为多类列。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我们可以dot带有代码的数据框。

    df['code'] = df[['a','b','c']].dot([4,2,1])
    df
    

    输出

       time  a  b  c  code
    0     1  0  1  0     2
    1     1  0  1  0     2
    2     1  1  0  0     4
    3     1  0  1  0     2
    4     1  0  0  1     1
    5     1  0  0  0     0
    

    【讨论】:

      【解决方案2】:

      这个例子应该是这样工作的:

      stack.csv

      time a b c
      1 0 1 0
      1 0 1 0
      1 1 0 0
      1 0 1 0
      1 0 0 1
      1 0 0 0
      

      main.py

      df = pd.read_csv('stack.csv', sep=' ', index_col=False)
      
      df['code'] = 0
      
      df.loc[df['a'] == 1, 'code'] = 4
      df.loc[df['b'] == 1, 'code'] = 2
      df.loc[df['c'] == 1, 'code'] = 1
      
      print(df)
      

      输出:

             time  a  b  c  code
      0     1  0  1  0     2
      1     1  0  1  0     2
      2     1  1  0  0     4
      3     1  0  1  0     2
      4     1  0  0  1     1
      5     1  0  0  0     0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-30
        • 2021-12-02
        • 2020-04-16
        • 2022-08-12
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多