【问题标题】:Set string while series is a boolean value?在系列是布尔值时设置字符串?
【发布时间】:2017-11-06 11:27:01
【问题描述】:

我想在 C 列中设置一个字符串,而 B 列中的值 >= 2(如果 >= 为 True,则为是,如果 >= 为 False,则为否)。输出应该如下:

    A B   C 
1   A 2 'yes'
2   B 3 'yes'
3   C 4 'yes'
4   D 5 'yes'
5   A 6 'yes'
6   B 7 'yes'
7   C 0 'no'
8   D 1 'no'
9   A 2 'yes'
10  B 3 'yes' 
11  C 4 'yes' 
12  D 0 'no' 

到目前为止,我已经尝试实现嵌套循环,但速度太慢了:

i= 0
for row in range(0, len(df)-1):
    if df['B'][i] >= 2:
        if df['B'][i] >= 2:
            df['C'][i] = 'yes'
        elif df['B'][i] >= 2:
            df['C'][i] = 'yes'

【问题讨论】:

  • 你的问题和你的 for 循环说的是两件不同的事情。您在问题中没有提到您检查的行之后的行也必须大于或等于 2。
  • 你是对的——我很抱歉。这是之前的尝试,所以我已经编辑了必要的更改。

标签: python pandas for-loop while-loop list-comprehension


【解决方案1】:

类似的东西

df['C'] = 'no'
df['C'][df['B'] >= 2] = 'yes'

【讨论】:

    【解决方案2】:

    这可以通过在 B 列上使用“apply”以及 lambda 函数和三元“if”来完成:

    import pandas as pd
    df = pd.DataFrame.from_dict({'A': ['A', 'B', 'C'], 'B': [1, 2, 3]})
    df['C'] = df['B'].apply(lambda r: "yes" if r >= 2 else "no")
    

    应用于 DataFrame 的列的“apply”将让您将函数应用于数据框中的每个值。所以我们测试每个值是否>= 2,如果是,则返回“是”,否则返回“否”。

    【讨论】:

      【解决方案3】:

      你可以使用 np.where

      df['C'] = np.where(df.B>=2, 'yes', 'no')
      
          A   B   C
      1   A   2   yes
      2   B   3   yes
      3   C   4   yes
      4   D   5   yes
      5   A   6   yes
      6   B   7   yes
      7   C   0   no
      8   D   1   no
      9   A   2   yes
      10  B   3   yes
      11  C   4   yes
      12  D   0   no
      

      【讨论】:

        【解决方案4】:

        这也可以通过根据您的条件创建一个布尔值列“C”来完成:

        df['C'] = df['B'] >= 2
        

        但如果您只想要“是”和“否”值,那么您可以将布尔值列转换为字符串并应用替换函数。

        df['C'] = df['C'].astype(str)
        df['C'].replace('False','No', inplace=True)
        df['C'].replace('True','Yes', inplace=True)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-16
          • 1970-01-01
          • 1970-01-01
          • 2015-02-07
          相关资源
          最近更新 更多