【问题标题】:Checking rows value and updating corresponding value within a column检查行值并更新列中的相应值
【发布时间】:2020-08-01 23:57:02
【问题描述】:

我在更改列中的值时遇到了一些问题。我的数据集有以下列

Index(['Date', 'Name', 'Surname', 'Verified Account', 'Col1', 'Col2', 'Col3',
       'Col4', 'Col5'],
      dtype='object')

'Verified Account', 'Col1', 'Col2', 'Col3','Col4', 'Col5' 具有值为'True'/'False' 的行。 现在'Verified Account' 仅基于来自Col1 的值。我想更新它,包括所有其他列,即:

if 'Col1' or 'Col2' or 'Col3' or 'Col4' or 'Col5' 的值为 'True',则 'Verified Account' 的值为 'True' 否则 'Verified Account' 的值为 'False'

我试过了:

df['Verified Account'] = df.apply(lambda x: 1 if df['Col1']=='True' or df['Col2']== 'True' or df['Col3']=='True' or df['Col4']== 'True' or df['Col5']=='True' else 'False') 

但我收到以下错误:

TypeError: Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]

我该如何解决?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    让我们做吧

    df['Verfied Account']=df[['col1'...]].any(1)
    

    【讨论】:

      【解决方案2】:

      我看到了 3 点:

      • 首先,您需要关注类型。在这里,数据似乎是字符串。 它是想要的类型吗?这似乎没有,因为您在 string 中对 boolean 进行字符串操作。第一步可能是将这些列转换为 boolean。这个discussion 解释了如何。您可以为所有这些列尝试以下操作:
      df['column_name'].map({"True": True, "False": False})
      
      • 第二点是您正在使用applylambda 函数。但问题是您没有使用内部的x 值,而是整个df。所以你需要用x 变量替换所有df 变量。 Here 是关于 applylambda 的一些读物。
      • 最后一点是apply 函数有一个参数axis 知道如何迭代:在列上或在行上。默认情况下,它位于列之上。但是在这里,显然,操作需要在行上执行。所以axis=1 是必需的。

      sn-p 变成:

      df['Verified Account'] = df.apply(lambda x: True if x['Col1']==True or x['Col2']== True or x['Col3']==True or x['Col4']== True or x['Col5']==True else False) 
      

      进一步改进

      • lambda 可以通过仅返回 if 条件来简化
      df['Verified Account'] = df.apply(lambda x: x['Col1']== True or 
                                                  x['Col2']== True or 
                                                  x['Col3']== True or
                                                  x['Col4']== True or 
                                                  x['Col5']==True) 
      
      • 有更有效的方法来执行此操作。 any 专为。不要忘记精确使用的轴,这里是行(例如axis=1)。你可以试试:
      df['Verified Account'] = df[["Col1", "Col2", "Col3", "Col4", "Col5"]].any(1)
      

      【讨论】:

        猜你喜欢
        • 2019-05-12
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        • 2011-07-24
        • 2020-04-16
        • 2022-12-18
        相关资源
        最近更新 更多