比较2列并在新列中添加一个值

时间:2019-12-14 22:28:41

标签: python pandas dataframe

关于如何解决这些问题,这里有很多建议,但是我找不到可以工作的任何东西。

我如何遍历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

也尝试过,但是后来我被不允许创建新列

1 个答案:

答案 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)