【问题标题】:updating cell values with if conditions pandas dataframe使用 if 条件 pandas dataframe 更新单元格值
【发布时间】:2022-12-15 21:10:06
【问题描述】:

我遇到了一些问题,其中我使用了 for 循环和 if 条件来更新数据框。它们应该是非常基本的 python 逻辑,但我在网上找不到解释,所以我想在这里问一下。

出于说明目的,让我们看一个简单的数据框 df:

   1  2
0  1  0
1  0  1
2  1  0
3  0  0
4  1  1

我想要基于前两列值的第三列:

最初我写道:

for i in range(len(df)):
    if df.loc[i,'1']==1 & df.loc[i,'2']==0:
        df.loc[i,'3']=1
    else:
        df.loc[i,'3']=0

但我得到了这个:

   1  2    3
0  1  0  0.0
1  0  1  0.0
2  1  0  0.0
3  0  0  1.0
4  1  1  0.0

然后我发现当我在我的条件中添加括号时它起作用了: 所以我用的不是if df.loc[i,'1']==1 & df.loc[i,'2']==0:if (df.loc[i,'1']==1) & (df.loc[i,'2']==0):

那么为什么会这样呢?

此外,我正在测试即使我只有一个条件,我是否总是需要支架:

for i in range(len(df)):
    if df.loc[1,'2']==1:
        df.loc[1,'4']=0
    else:
        df.loc[1,'4']=1
   

另一个问题发生在我缺少值并且只更新单元格 df.loc[1,'4'] 的地方:

    1   2   3   4
0   1   0   1.0 NaN
1   0   1   0.0 0.0
2   1   0   1.0 NaN
3   0   0   0.0 NaN
4   1   1   0.0 NaN
     
 

我真的很困惑,这次添加括号并没有改变任何东西。为什么会这样?

除了这两个问题,我更新单元格值的方法一般来说是错误的吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你最好使用np.where

     import numpy as np
     df['3'] = np.where (df['1']==1 & df['2']==0, 1, 0)
    

    【讨论】:

      【解决方案2】:

      不要使用循环,使用:

      (df['1'].eq(1) & df['2'].eq(0)).astype(int)
      

      此外,使用 eq 代替 == 避免需要用括号括起相等性以尊重 operator precedence

      【讨论】:

        【解决方案3】:

        利用:

        df['3'] = ((df['1'] == 1) & (df['2'] == 0)).astype(int)
        

        或者:

        for i in range(len(df)):
            if df.loc[i,'1']==1 and df.loc[i,'2']==0:
                df.loc[i,'3']=1
            else:
                df.loc[i,'3']=0
        
        
        print (df)
           1  2    3
        0  1  0  1.0
        1  0  1  0.0
        2  1  0  1.0
        3  0  0  0.0
        4  1  1  0.0
        

        【讨论】:

          猜你喜欢
          • 2017-10-29
          • 2017-08-27
          • 1970-01-01
          • 2021-05-21
          • 1970-01-01
          • 2016-01-06
          • 2014-04-04
          • 2021-07-14
          • 2021-01-25
          相关资源
          最近更新 更多