【问题标题】:pandas: Use if-else to populate new columnpandas:使用 if-else 填充新列
【发布时间】:2015-03-19 19:57:07
【问题描述】:

我有一个这样的数据框:

col1       col2      
  1          0
  0          1
  0          0
  0          0
  3          3
  2          0
  0          4

我想添加一个列,如果 col2 > 0 则为 1,否则为 0。如果我使用 R,我会做类似的事情

df1[,'col3'] <- ifelse(df1$col2 > 0, 1, 0)

我将如何在 python/pandas 中执行此操作?

【问题讨论】:

  • 是关于如何添加列,或者如何使用var = 1 if condition else 0语法的问题?

标签: python pandas if-statement dataframe


【解决方案1】:

您可以将布尔系列 df.col2 &gt; 0 转换为整数系列(True 变为 1False 变为 0):

df['col3'] = (df.col2 > 0).astype('int')

(要创建新列,您只需为其命名并将其分配给与 DataFrame 长度相同的系列、数组或列表。)

这会产生col3

   col2  col3
0     0     0
1     1     1
2     0     0
3     0     0
4     3     1
5     0     0
6     4     1

创建列的另一种方法是使用np.where,它允许您为真值或假值指定一个值,并且可能更接近R 函数ifelse 的语法。例如:

>>> np.where(df['col2'] > 0, 4, -1)
array([-1,  4, -1, -1,  4, -1,  4])

【讨论】:

    【解决方案2】:

    我假设您使用的是 Pandas(因为“df”符号)。如果是这样,您可以通过使用 .gt(大于)将 col2 与零进行比较来为 col3 分配一个布尔标志。将结果乘以 1 会将布尔标志转换为 1 和 0。

    df1 = pd.DataFrame({'col1': [1, 0, 0, 0, 3, 2, 0], 
                        'col2': [0, 1, 0, 0, 3, 0, 4]})
    
    df1['col3'] = df1.col2.gt(0) * 1
    
    >>> df1
    Out[70]: 
       col1  col2  col3
    0     1     0     0
    1     0     1     1
    2     0     0     0
    3     0     0     0
    4     3     3     1
    5     2     0     0
    6     0     4     1
    

    您也可以使用 lambda 表达式来获得相同的结果,但我相信上述方法对于您给定的示例更简单。

    df1['col3'] = df1['col2'].apply(lambda x: 1 if x > 0 else 0)
    

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 2021-08-14
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2021-10-01
      相关资源
      最近更新 更多