如何将两列相乘,并将条件应用于pandas-python中的一列



以下是一些示例数据:

data = {'Company': ['A', 'B', 'C', 'D', 'E', 'F'],
'Value': [18700, 26000, 44500, 32250, 15200, 36000],
'Change': [0.012, -0.025, -0.055, 0.06, 0.035, -0.034]
}
df = pd.DataFrame(data, columns = ['Company', 'Value', 'Change'])
df
Company Value   Change
0   A   18700   0.012
1   B   26000   -0.025
2   C   44500   -0.055
3   D   32250   0.060
4   E   15200   0.035
5   F   36000   -0.034

我想创建一个名为"新值"的新列。对于每一行,该列的逻辑是如下所示:

  • 如果更改>0,然后值+(值*更改(
  • 如果更改<0,然后值-(值*(abs(更改(((

我试图用下面的循环创建一个列表,并将其作为一个新列添加到df中,但当我只期望5(对应于df中的行数(时,返回的值比预期的要多得多。

lst = []
for x in df['Change']:
for y in df['Value']:
if x > 0:
lst.append(y + (y*x))
elif x < 0:
lst.append(y - (y*(abs(x))))
print(lst)

如果有人能指出我错在哪里,或者建议一种替代方法,那就太好了:(

你的两个条件实际上是相同的,所以这就是你所需要做的:

df['New Value'] = df['Value'] + df['Value'] * df['Change']

输出:

>>> df
Company  Value  Change  New Value
0       A  18700   0.012    18924.4
1       B  26000  -0.025    25350.0
2       C  44500  -0.055    42052.5
3       D  32250   0.060    34185.0
4       E  15200   0.035    15732.0
5       F  36000  -0.034    34776.0

或者,稍微一致一点:

df['New Value'] = df['Value'] * df['Change'].add(1)

df['New Value'] = df['Value'].mul(df['Change'].add(1))

最新更新