
[英]Create a new column in Pandas Dataframe based on the 'NaN' values in other columns
[英]How to create a new column in a dataframe based off values of other columns?
我有一个如下所示的起始日期框架。
df_Start = pd.DataFrame({'P':['IG','HY','IG',np.nan,np.nan], 'M':['HY','HY','IG', np.nan,np.nan], 'F' ['HY',np.nan,'HY', np.nan,np.nan],'D':['IG','IG','IG', 'HY',np.nan]})`
我想根据 P、M、F、D 列中的行值创建一个名为“结果”的新列。我希望“结果”列遵循的条件是 1) 如果 P 列中的任何行, M、F、D 包含“IG”,则结果列将填充“IG” 2)如果 P、M、F、D 列中的任何行包含“HY”且没有“IG”,则“结果”列将用“HY”填充 3) 如果 P、M、F、D 列中的一行不包含“HY”或“IG”并且只是“NaN”,那么结果列将用“无”填充
如果正确应用了这些条件,最终的 df 将类似于下面的 df。
df_end = pd.DataFrame({'Result':['IG','IG','IG', 'HY',None],'P':['IG','HY','IG',np.nan,np.nan], 'M':['HY','HY','IG', np.nan,np.nan], 'F':['HY',np.nan,'HY', np.nan,np.nan],'D':['IG','IG','IG', 'HY',np.nan]})
也许这对你有用?
import pandas as pd
import numpy as np
df_start =pd.DataFrame({'P':['IG','HY','IG',np.nan,np.nan], 'M':['HY','HY','IG', np.nan,np.nan], 'F':['HY',np.nan,'HY', np.nan,np.nan],'D':['IG','IG','IG', 'HY',np.nan]})
print(df_start)
df_start['aux'] = df_start.stack().groupby(level=0).apply(list)
df_start['result'] = np.where(df_start['aux'].astype(str).str.contains('IG'),'IG',np.where(df_start['aux'].astype(str).str.contains('HY'),'HY',np.nan))
print(df_start)
输出:
P M F D aux result
0 IG HY HY IG [IG, HY, HY, IG] IG
1 HY HY NaN IG [HY, HY, IG] IG
2 IG IG HY IG [IG, IG, HY, IG] IG
3 NaN NaN NaN HY [HY] HY
4 NaN NaN NaN NaN NaN nan
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.