为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2023-10-11 16:07:40
我有一个多级数据框,我想将 column 中的值secret与 column 上的条件进行比较group。如果 group = A,我们允许另一个数据帧中的值为空或 na。否则,对于不匹配的,输出 INVALID。多级数据框:        name               secret              group        df1     df2     df1     df2        df1     df2id                       1       Tim     Tim     random  na          A        A2       Tom     Tom     tree                A        A3       Alex    Alex    apple   apple       B        B4       May     May     file    cheese      C        C秘密的预期输出id     name    secret    group1      Tim       na        A2      Tom                 A3      Alex     apple      B4      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 columnresult_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'
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

假设我们有以下数据框:


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'}})

df

df.columns = pd.MultiIndex.from_tuples([('id',''), ('name', 'df1'), ('name', 'df2'),

                            ('secret', 'df1'), ('secret', 'df2'), ('group', 'df1'), ('group', 'df2')])

df

In[1]: 

  id  name        secret         group    

       df1   df2     df1     df2   df1 df2

0  1   Tim   Tim  random      na     A   A

1  2   Tom   Tom    tree             A   A

2  3  Alex  Alex   apple   apple     B   B

3  4   May   May    file  cheese     C   C

  1. 您可以用于np.select()根据条件返回结果。

  2. .droplevel()退出多索引数据框

  3. 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 met

df.columns = df.columns.droplevel(1)

df = df.loc[:,~df.columns.duplicated()]

df

Out[1]: 

   id  name         secret group

0   1   Tim             na     A

1   2   Tom                    A

2   3  Alex          apple     B

3   4   May  file > cheese     C


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信