迭代数据框中的行,对每个行执行计算并将答案放在新列中

时间:2018-01-25 18:47:48

标签: python pandas dataframe

python有点新鲜。实际上,我感兴趣的是迭代数据帧中的行,如果满足条件则对特定列执行计算,然后将答案放在新列的同一行中。

为了举例,如果我有一个数据帧:

   c1  c2 
0  20  82
1  15  14
2  10  19

如果c2中的值大于50,我可能希望将c1中的值减半,如果c2中的值小于50,则c1中的值加倍,并且答案出现在新列c3中,所以我最终得到了:

   c1  c2  c3
0  20  82  10
1  15  14  30
2  10  19  20

我知道如何进行数学运算,以及如何使用if / else函数,它只是迭代我正在努力的行以及如何将每个答案放入新列。我知道iterrows,但我不相信我完全理解如何使用它,或者在这种情况下是否合适?

干杯。

2 个答案:

答案 0 :(得分:2)

直接的方法是将其分配到同一数据框内的新列。如果名称存在,则替换列。否则附上。

In [2]: df = pd.DataFrame({'c1':[20,15,10],'c2':[82,14,19]})

In [3]: df
Out[3]: 
   c1  c2
0  20  82
1  15  14
2  10  19

In [6]: df['c3'] = df['c1'] + df['c2']

In [7]: df
Out[7]: 
   c1  c2   c3
0  20  82  102
1  15  14   29
2  10  19   29

In [8]: df['c4'] = 10

In [9]: df
Out[9]: 
   c1  c2   c3  c4
0  20  82  102  10
1  15  14   29  10
2  10  19   29  10

使用匿名函数可以实现if-else的事情:

In [13]: df['c5'] = df['c2'].apply(lambda x: x if x > 50 else 'nope')

In [14]: df
Out[14]: 
   c1  c2   c3  c4    c5
0  20  82  102  10    82
1  15  14   29  10  nope
2  10  19   29  10  nope

答案 1 :(得分:1)

import numpy as np
import pandas as pd

df = pd.DataFrame({'c1': [20, 15, 10], 'c2': [82, 14, 19]})

df['c3'] = np.where(df['c2'] > 50, df['c1'] * 0.5, df['c1'] * 2)
print(df)

输出:

   c1  c2    c3
0  20  82  10.0
1  15  14  30.0
2  10  19  20.0

np.where(df['c2'] > 50, df['c1'] * 0.5, df['c1'] * 2)的解释:

  1. 第一部分(= df['c2'] > 50)是我们要检查的条件(在这种情况下,将c2列与50进行比较,正如您在问题中指定的那样)。
  2. 第二部分(= df['c1'] * 0.5)是我们为条件为True的情况计算的值。
  3. 第三部分(= df['c1'] * 2)是我们为条件为False的情况计算的值。