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

Python 迭代数据帧中的行,对每个行执行计算,并将答案放入新列中,python,pandas,dataframe,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 我知道如何做

对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,但我不确定我是否完全理解如何使用它,或者它在本例中是否合适


干杯。

直接的方法是将其分配给同一数据帧内的新列。如果名称存在,将替换列。除此之外,它是附加的

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
输出:

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

解释
np.其中(df['c2']>50,df['c1']*0.5,df['c1']*2)

  • 第一部分(
    df['c2']>50
    )是我们正在检查的条件(在本例中,将
    c2
    列与50进行比较,如您在问题中所述)
  • 第二部分(
    df['c1']*0.5
    )是我们在条件为
    True
    的情况下计算的值
  • 第三部分(
    df['c1']*2
    )是我们为条件为
    False
    的情况计算的值
  •    c1  c2    c3
    0  20  82  10.0
    1  15  14  30.0
    2  10  19  20.0