【发布时间】: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