python - 将两个数据框中的两列与另一列的条件进行比较
问题描述
我有一个多级数据框,我想将 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'
解决方案
如果我理解你的正确,你想将“秘密”标记df2
为无效,如果秘密df1
和df2
不同并且组不是 A。你去:
condition = (df[('secret', 'df1')] != df[('secret', 'df2')]) &\
df[('group', 'df1')] != 'A')
df.loc[condition, ('secret', 'df2')] = 'INVALID'