【发布时间】:2022-01-15 11:43:09
【问题描述】:
以下是一些示例数据:
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,则值 + (值 * 变化)
- 如果 Change
我尝试使用以下循环创建一个列表并将其作为新列添加到 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)
如果有人能指出我哪里出错了,或者建议一种替代方法,那就太好了:)
【问题讨论】:
-
if Change Value - (Value * (abs(Change)) ) 这不就是
Value + Value*Change吗?所以df['Value'] * (1 + df['Change'])?还是你的意思是上一行的Change? -
不需要条件;鉴于 Change 的符号,这两个表达式是相同的(使用第一个)
-
是的,你们都是正确的——我的错误????
标签: python pandas dataframe loops dataset