Python 如何按列条件正确选择行进行计算

Python 如何按列条件正确选择行进行计算,python,pandas,Python,Pandas,我不理解熊猫在这种情况下的行为。显然,问题出在第3行,A列的值为负值,这导致了试图用分数次幂来提高它的数学问题 我使用df.loc限制了条件A>1下运行np.power的行。从第0行C列的NaN结果可以看出,过滤器工作正常,结果数据帧中的所有值都如预期的那样,但我得到了错误,因为np.power显然出于某种原因仍然计算第3行 您能帮助我理解为什么会发生这种情况,以及如何改进代码以避免错误吗 data = [{'A': 1, 'B': 10}, {'A': 2, 'B': 10}

我不理解熊猫在这种情况下的行为。显然,问题出在第3行,A列的值为负值,这导致了试图用分数次幂来提高它的数学问题

我使用df.loc限制了条件A>1下运行np.power的行。从第0行C列的NaN结果可以看出,过滤器工作正常,结果数据帧中的所有值都如预期的那样,但我得到了错误,因为np.power显然出于某种原因仍然计算第3行

您能帮助我理解为什么会发生这种情况,以及如何改进代码以避免错误吗

data = [{'A': 1, 'B': 10},
         {'A': 2, 'B': 10},
         {'A': 3, 'B': 10},
         {'A': -1,  'B': 10}]

df = pd.DataFrame(data)
df
Out[4]: 
   A   B
0  1  10
1  2  10
2  3  10
3 -1  10

df['C'] = df.loc[df.A > 1, 'A'] * np.power(df['A'],0.3)
df
/home/meteoadriatic/.local/lib/python3.5/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in power
  """Entry point for launching an IPython kernel.
Out[5]: 
   A   B         C
0  1  10       NaN
1  2  10  2.462289
2  3  10  4.171168
3 -1  10       NaN
当你这样做的时候

np.power(df['A'],0.3)
df['A']
仍然是指整个列

相反,您可以使用
mul
来避免警告:

df['C'] = np.power(df.loc[df.A > 1, 'A'], 0.3).mul(df.A)

>>> df
   A   B         C
0  1  10       NaN
1  2  10  2.462289
2  3  10  4.171168
3 -1  10       NaN
另一个选项是再次选择:

df['C'] = df.loc[df.A > 1, 'A'] * np.power(df.loc[df.A>1,'A'],0.3)