首页 > 解决方案 > 比较列中的结果并附加到 pandas 数据框

问题描述

我正在做一个虚拟项目来磨练我的 python 技能,但我遇到了一个问题。我有一个 pandas 列,里面有很多值,我想做以下事情(我设置了 chunksize = 1440,因为我想处理 1440 组中的数据并分别存储每组 1440 的输出。):

取列的第一个值(让它成为'x')遍历剩余的(1439)个值,如果你找到一个大于'x'的值,让它成为'y'。如果您发现一个条目的值比“y”大 10,请在单独的列中输入“利润”。或者,如果您发现一个条目的值比“y”小 10,则在单独的列中输入“损失”。这是我尝试过的:

import pandas as pd
 
for df in pd.read_csv('C:/Users/Workstation/.spyder-py3/AAPL.USUSD_Candlestick_1_M_BID_14.11.2018-28.11.2020 (1).csv',chunksize=1440):
 
df = df[ df["Volume"] != 0]
 
df['Changing'] = ''
 
df.loc[(df.High.shift() - df.High).where(lambda x:x>3).dropna().index+1, 'Changing'] = "Profit"
 
df.loc[(df.High.shift() - df.High).where(lambda x:x<3).dropna().index+1, 'Changing'] = "Loss"

但我得到了错误:

'[960] not in index'

我认为当专栏结束时循环不会停止。有没有办法来解决这个问题?

我知道这很多,但任何帮助将不胜感激。

提前致谢...

标签: pythonpandas

解决方案


for df in pd.read_csv('C:/Users/Workstation/.spyder-py3/AAPL.USUSD_Candlestick_1_M_BID_14.11.2018-28.11.2020 (1).csv',chunksize=1440):
    df = df[ df["Volume"] != 0]
    df['Changing'] = ''
    df.loc[(df.High.shift() - df.High).where(lambda x: x > 10).dropna().index+1, 'Changing'] = "Profit"
    df.loc[(df.High.shift() - df.High).where(lambda x: x < 10).dropna().index+1, 'Changing'] = "Loss"

推荐阅读