python - 循环、if 语句和 append() 的数据框
问题描述
我有一套非常特殊的逻辑,我试图在 Python 中实现,这显然超出了我目前的理解。
我将逐步介绍这个概念,然后在下面发布代码尝试:
- 确定两个单独列中的值是否符合条件(>= 和 <= 0.5) - 如果为真,则 .append() 将第三列的值(在通过测试的完全相同的日期时间索引处)到单独的时间序列目的。
- ELIF:确定前两列中的值是否符合条件(<= 和 >= 0.5) - 如果为真,则 .append() 第四列的值(在通过测试的完全相同的日期时间索引处)到单独的时间序列对象(与第一个测试相同)。
- 最后一个对象是一个单独的时间序列对象,它按每个测试通过时的时间顺序保存第 3 列和第 4 列的值。
以下是我迄今为止尝试过的代码:
# create empty time series
port_switching = pd.Series([])
# attempt to define a function to switch returns
def switch(var1, var2, var3, var4):
if var1 >= 0.5 and var2 =< 0.5:
port_swtiching.append(cap_ret.last('D'))
elif var1 <= 0.5 and var1 >= 0.5:
port_switching.append(ew_ret.last('D')).
switch(df["var1", "var2", "var3", "var4"]
print(port_swtiching)
现在,我很清楚这段代码的错误。此时我已经收到 Python 中可用的所有错误。我只是不确定如何修复错误。任何人都可以提供有关如何前进的想法吗?我想创建一个for loop
因此迭代更大的数据集。此外,我不一定需要一个函数——无论逻辑如何。
解决方案
我认为您正在寻找的部分是for
对所有行进行循环并根据行进行一些计算,因此我不会介绍您的所有详细过程,而只是展示基本用法。
请看一下apply()
。(文档)
该apply()
功能可以让您沿着任何轴循环。
您可以轻松地在函数中写下您的逻辑(switch()
如下例所示)。
在此函数中,您可以通过点运算符访问列值。(如row.var1
)。
这是一个最小的例子。
import pandas as pd
d = {'var1': [0.7, 0.5],
'var2': [0.6, 0.3],
'var3': [3, 4],
'var4': [3, 4]}
df = pd.DataFrame(data=d)
def switch(row):
if row.var1 >= 0.5 and row.var2 <= 0.5:
return 'foo'
elif row.var1 <= 0.5 and row.var1 >= 0.5:
return 'bar'
else:
return 'baz'
port_switching = df.apply(switch, axis=1)
推荐阅读
- c++ - 为什么我的文件没有用 ifstream C++ 打开?
- javascript - 如何检索 Json 数据并在 Chart.Js 上显示
- angular - 为什么需要在 Web 服务器上提供 Angular app dist build?
- node.js - 如何编写一个循环通过深度嵌套的 json 模式表单对象的函数?
- vb6 - 接受文本框中的名称,当有人点击打印按钮时打印它
- javascript - 数组 forEach 不返回布尔值
- javascript - 隐藏损坏的 img chrome 扩展
- laravel-5.5 - 尝试使用 laravel 获取过滤值但无法正常工作,结果错误
- header-files - 在相应目录中安装标头
- javascript - res.json 不返回响应