关于如何解决这些问题,这里有很多建议,但是我找不到可以工作的任何东西。
我如何遍历DataFrame以比较来自2个不同列但在同一行中的2个单元格中的值,并在新列中添加值。我知道我写的代码无法使用,因为“ for循环”是基于列而不是行
def open_ticker_index():
with open('pickle/' + tickerlist, "rb") as f:
tickers = pickle.load(f)
for ticker in tickers:
df = pd.read_csv('calcuatet_daily_stock_dfs/' + ticker + '.csv')
df = df.tail(250)
for row in df:
if df['Adj Close'] > df['MA3']:
df['Adj Close > MA3'] = 1
else:
df['Adj Close > MA3'] = 0
我也尝试过这种方法,但是后来我被不允许创建新列
def open_ticker_index():
with open('pickle/' + tickerlist, "rb") as f:
tickers = pickle.load(f)
for ticker in tickers:
df = pd.read_csv('calcuatet_daily_stock_dfs/' + ticker + '.csv')
df = df.tail(250)
df['Adj Close > MA3']
for col, row in df.iterrows():
if (col, row["Adj Close"][1]) > (col, row["MA3"][1]):
df['Adj Close > MA3'] = 1
else:
df['Adj Close > MA3'] = 0
也尝试过,但是后来我被不允许创建新列
答案 0 :(得分:-1)
您不需要进行循环,使用numpy更容易进行如下比较:
import numpy as np
import pandas as pd
from io import StringIO
data = """
Col1,Adj,MA3
A,1,2
B,8,5
C,7,7
"""
# Here just to create a csv
df = pd.read_csv(StringIO(data),sep=',')
# With 2 Logical operators > <
df['Adj Close > MA3'] =np.where(df['Adj']>=df['MA3'],'1', '0')
print(df)
# With 3 Logical operators > < =
df['Adj Close > MA3'] =np.where(df['Adj']>df['MA3'],'1', np.where(df['Adj']<df['MA3'],'0', 'equals'))
print(df)