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,但我不相信我完全理解如何使用它,或者在这种情况下是否合适?
干杯。
答案 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)
的解释:
df['c2'] > 50
)是我们要检查的条件(在这种情况下,将c2
列与50进行比较,正如您在问题中指定的那样)。df['c1'] * 0.5
)是我们为条件为True
的情况计算的值。df['c1'] * 2
)是我们为条件为False
的情况计算的值。