以下是一个示例:
import pandas as pddf = pd.DataFrame({ 'Column A' : ['null',20,30,40,'null'],'Column B' : [100,'null',30,50,'null']});
我需要一个Python函数来比较两个列:
-
如果一列是缺失值,我们从另一列填充它。
-
如果两列的值都是’NULL’,我们保留’NULL’。
-
如果两列的值不同(不一致),则将两列的值都替换为’NULL’。
-
返回一个属性。
运行函数后,数据应如下所示。
这是我目前所做的,我需要帮助实现第3步
def myFunction(firAttribute,secAttribute): x=df.ix[:,[firAttribute,secAttribute]] x['new']=x[firAttribute].fillna(x[secAttribute]) x['new2']=x[secAttribute].fillna(x[firAttribute]) x['new'] =x['new'].fillna(x['new2']) return x['new']
回答:
你可以先使用replace
将null
替换为NaN
,然后使用combine_first
在列之间合并NaN
,最后使用布尔索引来匹配不同列的值并填充NaN
:
import pandas as pdimport numpy as npdf = pd.DataFrame({ 'Column A' : ['null',20,30,40,'null'], 'Column B' : [100,'null',30,50,'null']});print df Column A Column B0 null 1001 20 null2 30 303 40 504 null null#将null替换为NaNdf = df.replace("null", np.nan)print df Column A Column B0 NaN 1001 20 NaN2 30 303 40 504 NaN NaN
df['Column A'] = df['Column A'].combine_first(df['Column B'])df['Column B'] = df['Column B'].combine_first(df['Column A'])print df Column A Column B0 100 1001 20 202 30 303 40 504 NaN NaN#将不一致的值替换为NaNdf[df['Column A'] != df['Column B']] = np.nanprint df Column A Column B0 100 1001 20 202 30 303 NaN NaN4 NaN NaN