繁体   English   中英

如何根据其他列的值在数据框中创建新列?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM