首页 > 解决方案 > 将两个数据框中的两列与另一列的条件进行比较

问题描述

我有一个多级数据框,我想将 column 中的值与 columnsecret上的条件进行比较group。如果 group = A,我们允许另一个数据框中的值为空或 na。否则,为不匹配的输出 INVALID。

多级数据框:

        name               secret              group
        df1     df2     df1     df2        df1     df2
id                       
1       Tim     Tim     random  na          A        A
2       Tom     Tom     tree                A        A
3       Alex    Alex    apple   apple       B        B
4       May     May     file    cheese      C        C

秘密的预期输出

id     name    secret    group
1      Tim       na        A
2      Tom                 A
3      Alex     apple      B
4      May     INVALID     C

到目前为止,我有:

result_df['result'] = multilevel_df.groupby(level=0, axis=0).apply(lambda x: secret_check(x)) 

#take care of the rest by compare column by column
result_df = multilevel_df.groupby(level=0, axis=1).apply(lambda x: validate(x))

def validate(x):
  if x[0] == x[1]:
        return x[1]
    else:
        return 'INVALID'

def secret_check(x): 
   if (x['group'] == 'A' and pd.isnull(['secret']):  #this line is off
      return x[1] 
   elif x[0] == x[1]:
      return x[1]
   else:
      return 'INVALID'

标签: pythonpandasdataframemulti-level

解决方案


如果我理解你的正确,你想将“秘密”标记df2为无效,如果秘密df1df2不同并且组不是 A。你去:

condition = (df[('secret', 'df1')] != df[('secret', 'df2')]) &\
             df[('group',  'df1')] != 'A')
df.loc[condition, ('secret', 'df2')] = 'INVALID'

推荐阅读