【问题标题】:After applying comparison operator how to output to another column应用比较运算符后如何输出到另一列
【发布时间】:2018-12-23 17:59:47
【问题描述】:

我的dataframe 中有一些交易数据。我要做的是根据几个条件检查一列中的值是否大于另一列中的值。之后我想创建一个新列并输出结果(-1,1 或 0)。

for n in range(0,len(df)):
    if df['Close'].iloc[n] > df['Ichi'].iloc[n] and df['Close'].iloc[n-1] < df['Ichi'].iloc[n]:
        print("1")
    elif df['Close'].iloc[n]< df['Ichi'].iloc[n] and df['Close'].iloc[n-1] > df['Ichi'].iloc[n]:
       print("-1")
    else:
       print("0")

条件是:如果当前['Close']值大于当前['Ichi']值并且['Close']先前值小于当前['Ichi']则输出1。否则输出0。并且相反的应该输出-1。我了解如何打印,但无法将其输出到单独的列。

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    在 pandas 中最好避免循环,因为如果存在矢量化解决方案,则速度较慢,这里使用 numpy.selectshift

    m1 = df['Close'] > df['Ichi']
    m2 = df['Close'].shift() < df['Ichi']
    m3 = df['Close'] < df['Ichi']
    m4 = df['Close'].shift() > df['Ichi']
    
    df['new'] = np.select([m1 & m2, m3 & m4], [1,-1], 0)
    

    【讨论】:

    • 成功了!非常感谢!如果最终我将拥有多个数据帧并为它们计算相同的东西,目的是制作一个可视化表格,我可以在其中有效地跟踪我有这些信号 (0,1,-1) 的位置。我正在使用加密交换 API 获取此数据帧。如果我拉出 20 df,我需要将它们全部放在 1 个数据帧中,然后创建向量吗?我试图了解如何前进的逻辑
    • @kirillzakharov - 这取决于需要什么,一种解决方案是通过concat 将所有DataFrame 连接在一起,例如dfs = [df1, df2, df3, .., df20]df_big = pd.concat(dfs),然后只使用一个DataFrame。另一个是循环数据帧字典,如this,并分别处理每个数据帧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多