Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python上使用If-then命令_Python_Pandas_If Statement_Conditional - Fatal编程技术网

在Python上使用If-then命令

在Python上使用If-then命令,python,pandas,if-statement,conditional,Python,Pandas,If Statement,Conditional,我有一个代码如下 GU_ES3['Qnd'] = GU_ES3['Qnd,hw_m2'] * GU_ES3['UPOR'] 我发现,GU_ES3['UPOR']中的一些值是空的。在这个场景中,我想调用一些其他列,例如GU_ES3['NPOR'],但只有在这种情况下,GU_ES3['UPOR']列中的值是0或NaN时 你能帮我吗?你想帮我吗 在特定情况下,一个数据帧中的值被另一个数据帧替换 确保平等对待0或NaN 对于(2),您可以将0替换为NaN;对于(1),您可以使用pd.Series.fi

我有一个代码如下

GU_ES3['Qnd'] = GU_ES3['Qnd,hw_m2'] * GU_ES3['UPOR']
我发现,
GU_ES3['UPOR']
中的一些值是空的。在这个场景中,我想调用一些其他列,例如
GU_ES3['NPOR']
,但只有在这种情况下,
GU_ES3['UPOR']
列中的值是
0
NaN

你能帮我吗?

你想帮我吗

  • 在特定情况下,一个数据帧中的值被另一个数据帧替换
  • 确保平等对待0或NaN
  • 对于(2),您可以将0替换为NaN;对于(1),您可以使用
    pd.Series.fillna
    在UPOR中用NPOR填充NaN,但仅在NaN所在的位置

    i = GU_ES3['Qnd,hw_m2']
    j = GU_ES3['UPOR'].replace(0, np.nan).fillna(GU_ES3['NPOR'])
    GU_ES3['Qnd'] = i * j 
    
    或者,您可以使用
    np。其中
    执行更换:

    GU_ES3['Qnd'] = GU_ES3['Qnd,hw_m2'] * np.where(
        GU_ES3['UPOR'].replace({0 : np.nan}).isna(), GU_ES3['NPOR'], GU_ES3['UPOR']
    )
    
    请注意,使用replace,例如,如果您还想替换1、2或3,则只需在代码中使用
    .replace(dict.fromkeys([1,2,3],np.nan))

    您想

  • 在特定情况下,一个数据帧中的值被另一个数据帧替换
  • 确保平等对待0或NaN
  • 对于(2),您可以将0替换为NaN;对于(1),您可以使用
    pd.Series.fillna
    在UPOR中用NPOR填充NaN,但仅在NaN所在的位置

    i = GU_ES3['Qnd,hw_m2']
    j = GU_ES3['UPOR'].replace(0, np.nan).fillna(GU_ES3['NPOR'])
    GU_ES3['Qnd'] = i * j 
    
    或者,您可以使用
    np。其中
    执行更换:

    GU_ES3['Qnd'] = GU_ES3['Qnd,hw_m2'] * np.where(
        GU_ES3['UPOR'].replace({0 : np.nan}).isna(), GU_ES3['NPOR'], GU_ES3['UPOR']
    )
    
    请注意,使用replace时,如果您想同时替换1、2或3,只需在代码中使用
    .replace(dict.fromkeys([1,2,3],np.nan))

    尝试使用:

    尝试使用:


    这是熊猫吗?还是一本字典?熊猫。我将编辑原始问题。这是熊猫吗?还是一本字典?熊猫。我将编辑原始问题。这是一个干净的解决方案,但是使用where语句(df.where或np.where)并检查0或np.nan不是更容易吗?只需将where语句中的值设置为另一列的值?@grandwilliams它们只是做同一件事的两种方法。如果不更换,则需要两个条件。如果你想以同样的方式对待两件以上的事情,你需要更多。最好先替换,然后再忘记。我肯定认为您的解决方案最有趣,看起来也最优雅,但我很好奇,对于大型数据集,它们之间是否有很大的性能差异。我假设pandas能够使用where类型的逻辑索引statement@GrantWilliams当然,可能有。replace和fillna都不具备出色的性能。OP最好的做法是在他们的数据上测试这些解决方案,并找出哪一个效果最好。顺便说一句,我自己添加了一个
    np.where
    备选方案。我绝对喜欢你的解决方案,不想让它看起来像我说的那样不好或什么的。我只是利用我在这类问题上的任何机会来学习一些技巧上的权衡。我想这是一个很好的机会来学习这是一个干净的解决方案,但是使用where语句(df.where或np.where)并检查0或np.nan不是更容易吗?只需将where语句中的值设置为另一列的值?@grandwilliams它们只是做同一件事的两种方法。如果不更换,则需要两个条件。如果你想以同样的方式对待两件以上的事情,你需要更多。最好先替换,然后再忘记。我肯定认为您的解决方案最有趣,看起来也最优雅,但我很好奇,对于大型数据集,它们之间是否有很大的性能差异。我假设pandas能够使用where类型的逻辑索引statement@GrantWilliams当然,可能有。replace和fillna都不具备出色的性能。OP最好的做法是在他们的数据上测试这些解决方案,并找出哪一个效果最好。顺便说一句,我自己添加了一个
    np.where
    备选方案。我绝对喜欢你的解决方案,不想让它看起来像我说的那样不好或什么的。我只是利用我在这类问题上的任何机会来学习一些技巧上的权衡。我觉得这是一个很好的学习机会