Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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计算时添加条件?_Python_Pandas_If Statement_Series_Calculated Columns - Fatal编程技术网

如何在使用Python计算时添加条件?

如何在使用Python计算时添加条件?,python,pandas,if-statement,series,calculated-columns,Python,Pandas,If Statement,Series,Calculated Columns,我有一个带有两个数字列的数据框。我想添加第三列来计算差异。但条件是,如果第一列中的值为空或Nan,则差值应为第二列中的值 有人能帮我解决这个问题吗 任何建议和线索将不胜感激! 谢谢。使用了一个示例数据帧,但不难理解: df = pd.DataFrame({'A': [1, 2, np.nan, 3], 'B': [10, 20, 30, 40]}) def diff(row): return row['B'] if (pd.isnull(row['A'])) else (row['B'

我有一个带有两个数字列的数据框。我想添加第三列来计算差异。但条件是,如果第一列中的值为空或Nan,则差值应为第二列中的值

有人能帮我解决这个问题吗

任何建议和线索将不胜感激!
谢谢。

使用了一个示例数据帧,但不难理解:

df = pd.DataFrame({'A': [1, 2, np.nan, 3], 'B': [10, 20, 30, 40]})

def diff(row):
    return row['B'] if (pd.isnull(row['A'])) else (row['B'] - row['A'])

df['C'] = df.apply(diff, axis=1)
原始数据帧:

    A   B   
0   1.0 10  
1   2.0 20  
2   NaN 30  
3   3.0 40
应用后

    A   B   C
0   1.0 10  9.0
1   2.0 20  18.0
2   NaN 30  30.0
3   3.0 40  37.0

使用了示例数据帧,但不难理解:

df = pd.DataFrame({'A': [1, 2, np.nan, 3], 'B': [10, 20, 30, 40]})

def diff(row):
    return row['B'] if (pd.isnull(row['A'])) else (row['B'] - row['A'])

df['C'] = df.apply(diff, axis=1)
原始数据帧:

    A   B   
0   1.0 10  
1   2.0 20  
2   NaN 30  
3   3.0 40
应用后

    A   B   C
0   1.0 10  9.0
1   2.0 20  18.0
2   NaN 30  30.0
3   3.0 40  37.0
试试这个:

def diff(row):
    if not row['col1']:
        return row['col2']
    else:
        return row['col1'] - row['col2']

df['col3']= df.apply(diff, axis=1)
试试这个:

def diff(row):
    if not row['col1']:
        return row['col2']
    else:
        return row['col1'] - row['col2']

df['col3']= df.apply(diff, axis=1)

这不是一个有条件的情况,只是一个数学运算。。假设您有df:

使用.sub()方法考虑您的df:

返回输出:

   July Sales  August Sales   Diff
0       459.0           477   18.0
1       422.0           125 -297.0
2       348.0           483  135.0
3       397.0           271 -126.0
4         NaN           563  563.0
5       191.0           325  134.0
6       435.0           463   28.0
7         NaN           479  479.0
8       475.0           473   -2.0
9       284.0           496  212.0

这不是一个有条件的情况,只是一个数学运算。。假设您有df:

使用.sub()方法考虑您的df:

返回输出:

   July Sales  August Sales   Diff
0       459.0           477   18.0
1       422.0           125 -297.0
2       348.0           483  135.0
3       397.0           271 -126.0
4         NaN           563  563.0
5       191.0           325  134.0
6       435.0           463   28.0
7         NaN           479  479.0
8       475.0           473   -2.0
9       284.0           496  212.0

您应该尽可能使用矢量化操作。在这里,您可以使用:

但是,考虑到这一点与考虑<代码>楠<代码>值在<代码> DF[7月销售] 等于零。因此,您可以使用:


您应该尽可能使用矢量化操作。在这里,您可以使用:

但是,考虑到这一点与考虑<代码>楠<代码>值在<代码> DF[7月销售] 等于零。因此,您可以使用:



没有提供足够的细节。什么是数据帧?这是某种CSV文件吗?我更新了这个问题……如果没有提供足够的细节,任何线索都会有帮助。什么是数据帧?这是某种CSV文件吗?我更新了这个问题……任何线索都会有帮助的。谢谢。这正是我想要的答案。你在C列中30 NaN的值是NaN,这不是他想要的答案。我认为你把这件事复杂化了一点。这是第2列-第1列的简单减法。
apply
+如果可以使用矢量化操作,则不建议熊猫使用自定义函数。@d_kennetz是的,您是对的,谢谢。:)另外,修复了条件。谢谢。这正是我想要的答案。你在C列中30 NaN的值是NaN,这不是他想要的答案。我认为你把这件事复杂化了一点。这是第2列-第1列的简单减法。
apply
+如果可以使用矢量化操作,则不建议熊猫使用自定义函数。@d_kennetz是的,您是对的,谢谢。:)此外,还修复了该条件。
apply
+如果有矢量化操作,则不建议熊猫使用自定义功能。
apply
+如果有矢量化操作,则不建议熊猫使用自定义功能。谢谢。这个答案很有用。没问题,很乐意帮忙!我认为只要可能就尽量保持简单是件好事。再次谢谢你d_kennetz。。如果我想再添加一个条件,即7月和8月都是NaN,并且差值应该为0,该怎么办。我该怎么做?谢谢如果它们都为NaN,则结果将为0。表示fill_value=0的代码位表示将NaN视为0。明白了!谢谢,谢谢。这个答案很有用。没问题,很乐意帮忙!我认为只要可能就尽量保持简单是件好事。再次谢谢你d_kennetz。。如果我想再添加一个条件,即7月和8月都是NaN,并且差值应该为0,该怎么办。我该怎么做?谢谢如果它们都为NaN,则结果将为0。表示fill_value=0的代码位表示将NaN视为0。明白了!谢谢,非常感谢,非常感谢。