如何在使用Python计算时添加条件?
我有一个带有两个数字列的数据框。我想添加第三列来计算差异。但条件是,如果第一列中的值为空或Nan,则差值应为第二列中的值 有人能帮我解决这个问题吗 任何建议和线索将不胜感激!如何在使用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'
谢谢。使用了一个示例数据帧,但不难理解:
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。明白了!谢谢,非常感谢,非常感谢。