将两个数据框中的两列与另一列上的条件进行比较

我有一个多级数据框,我想将 column 中的值secret与 column 上的条件进行比较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'


九州编程
浏览 73回答 1
1回答

守候你守候我

假设我们有以下数据框:df = pd.DataFrame({0: {0: 1, 1: 2, 2: 3, 3: 4}, 1: {0: 'Tim', 1: 'Tom', 2: 'Alex', 3: 'May'}, 2: {0: 'Tim', 1: 'Tom', 2: 'Alex', 3: 'May'}, 3: {0: 'random', 1: 'tree', 2: 'apple', 3: 'file'}, 4: {0: 'na', 1: '', 2: 'apple', 3: 'cheese'}, 5: {0: 'A', 1: 'A', 2: 'B', 3: 'C'}, 6: {0: 'A', 1: 'A', 2: 'B', 3: 'C'}})dfdf.columns = pd.MultiIndex.from_tuples([('id',''), ('name', 'df1'), ('name', 'df2'),                            ('secret', 'df1'), ('secret', 'df2'), ('group', 'df1'), ('group', 'df2')])dfIn[1]:   id  name        secret         group           df1   df2     df1     df2   df1 df20  1   Tim   Tim  random      na     A   A1  2   Tom   Tom    tree             A   A2  3  Alex  Alex   apple   apple     B   B3  4   May   May    file  cheese     C   C您可以用于np.select()根据条件返回结果。.droplevel()退出多索引数据框并df.loc[:,~df.columns.duplicated()]删除重复的列。由于我们将答案设置为df1列,df2因此不需要列。df[('secret', 'df1')] = np.select([(df[('group', 'df2')] != 'A') &                                    (df[('secret', 'df1')] != df[('secret', 'df2')])], #condition 1                                  [df[('secret', 'df1')] + ' > ' + df[('secret', 'df2')]], #result 1                                   df[('secret', 'df2')]) #alterantive if conditions not metdf.columns = df.columns.droplevel(1)df = df.loc[:,~df.columns.duplicated()]dfOut[1]:    id  name         secret group0   1   Tim             na     A1   2   Tom                    A2   3  Alex          apple     B3   4   May  file > cheese     C
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python