【问题标题】:Conditional Statements for dataframes数据帧的条件语句
【发布时间】:2019-12-22 04:52:01
【问题描述】:

我有一个数据框,如下所示。 Dataframe start

我想查看 D、F、M、P 列并返回一个 Result 列,该列是每行中出现次数最多的值。

我要确保此语句遵循的规则是: 1) 如果包含 2 个 IG 和 2 个 HY 的行之间存在拆分,则在 Result 列中返回 HY。
2) 如果列包含 NaN 值,则忽略它并使用其他可用值。

我希望生成的数据框如下所示: Result_DF

df_Start = pd.DataFrame({'P':['IG','HY','IG',np.nan,'HY'], 'M':['HY','HY','IG', np.nan,'IG'], 'F':['HY',np.nan,'HY', np.nan,'IG'],'D':['IG','IG','IG', 'HY','IG']})

df_end = pd.DataFrame({'Result':['HY','HY','IG', 'HY','IG'],'P':['IG','HY','IG',np.nan,'HY'], 'M':['HY','HY','IG', np.nan,'IG'], 'F':['HY',np.nan,'HY', np.nan,'IG'],'D':['IG','IG','IG', 'HY','IG']})




def f(x):

frequencies = pd.Series(data=[y for y in x if pd.isnull(y)==False]).value_counts()
a,b,c = 0,0,0
if 'IG' in frequencies:
    b = frequencies['IG']
if 'HY' in frequencies:
    a = frequencies['HY']
if 'PFA' in frequencies: 
    c = frequencies['PFA']
return 'PFA' if c > 0 elif 

for i,row in new_df.iterrows(): new_df.loc[i,'result'] = f(row)

【问题讨论】:

    标签: python-3.x dataframe if-statement conditional-statements


    【解决方案1】:

    试试这个,让我知道它是否有效

    def f(x):
        frequencies = pd.Series(data=[y for y in x if np.isnan(y)==False]).value_counts()
    
        a,b = frequencies['HY'],frequencies['IG']
    
    
        return 'HY' if a>=b else 'IG'
    df['result'] = df.columns[['D','F','M','P']].apply(lambda x: f(x))
    
    
    

    我现在无法弄清楚为什么上述方法不起作用

    
    def f(x):
    
        frequencies = pd.Series(data=[y for y in x if pd.isnull(y)==False]).value_counts()
        a,b,c = 0,0,0
        if 'IG' in frequencies:
            b = frequencies['IG']
        if 'HY' in frequencies:
            a = frequencies['HY']
        if 'PFA' in frequencies:
            c = frequencies['PFA']
        if c>=1:
            return 'PFA'
        else:
            return 'HY' if a>=b else 'IG'
    
    
    for i,row in df_Start.iterrows():
        df_Start.loc[i,'result'] = f(row)
    
    

    新的应该可以工作。

    【讨论】:

    • 您好,感谢您的回复。当我尝试应用该函数时,我收到一个错误,返回 "'AttributeError: 'Index' object has no attribute 'apply'' 。知道吗?
    • 你能澄清一下频率行中的“数据”应该是什么吗?
    • 这是一个参数占位符。这不是变量
    • 哦。有没有办法纠正出现的索引错误?
    • 出现的新错误是'IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices ' ...任何想法? @Parijat Bhatt
    猜你喜欢
    • 2022-08-22
    • 2021-01-28
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2014-01-25
    • 2021-06-19
    相关资源
    最近更新 更多