如何从满足特定条件的 DataFrame 列中的行返回值?

时间:2020-12-18 22:34:40

标签: python pandas dataframe return-value

我正在尝试定义一个函数,该函数将遍历数据框中现有列的每一行,并在满足某些条件时将其值写入同一行上的新列:

def priceinspection(row): 
  if row["trend"] = "stronguptrend" or "strongdowntrend" or "superuptrend" or "superdowntrend" or "hyperuptrend" or "hyperdowntrend": 
    val = row["Close"] 
  else: 
    val = " " 
  return val

但是 val= row["Close"] 导致语法错误。我应该如何修复代码,以便在满足我的条件时返回“关闭”列值?

4 个答案:

答案 0 :(得分:1)

请根据条件进行布尔选择并使用 np.where(condition, val if condition, val if not condition)。示例如下。

一些数据

import pandas as pd
df=pd.DataFrame({'trend':["stronguptrend" ,"strongdowntrend" ,"superuptrend", "superdowntrend" ,"hyperuptrend" , "hyperdowntrend"]})

print(df)

       trend
0    stronguptrend
1  strongdowntrend
2     superuptrend
3   superdowntrend
4     hyperuptrend
5   hyperdowntrend

解决方案

import numpy as np
df['Close']=np.where(df['trend'].isin(["stronguptrend","strongdowntrend"]),'val',"")
print(df)

             trend   Close
0    stronguptrend   val
1  strongdowntrend   val
2     superuptrend      
3   superdowntrend      
4     hyperuptrend      
5   hyperdowntrend     

答案 1 :(得分:1)

这是我如何使用我创建的任意条件来做到这一点。如果 'stronguptrend 包含字符串 'Fail',则表会将 writestring 的值添加到新创建的“关闭”列中。

如果条件不满足则只打印表格。

df = pd.read_csv(".../ExcelFile.csv")
df_filter= df[['stronguptrend','strongdowntrend','superuptrend',"superdowntrend", "hyperuptrend", "hyperdowntrend"]]
if df_filter['stronguptrend'].str.contains('Fail').any():
    for index,row in df_filter.iterrows():
        writestring = ''
        df_filter.at[index, 'Close'] = writestring
    print(df_filter)
else:
    print(df_filter)

答案 2 :(得分:1)

我意识到我犯了一个基本错误,我使用 = do 表示当 == 是 python 中使用的符号时。感谢 bnaecker 在问题评论中回答

答案 3 :(得分:0)

这是一个简单的方法。

def priceinspection(df):

    new_column_list = []

    for row in df[['trend']].values:
        if row[0] == ("strongdowntrend" or "stronguptrend" or "superuptrend" or 
"superdowntrend" or "hyperuptrend" or "hyperdowntrend"):
            new_column_list.append("Close")
        else:
            new_column_list.append("")
        
    df['new_column'] = new_column_list
    return(df)