熊猫:有条件地组合多索引数据帧

时间:2020-04-07 11:51:16

标签: python pandas dataframe multi-index

我有两个数据帧(df1和df2),它们是从同一datafram使用的pd.groupby。 我想根据以下逻辑有条件地创建另一个数据框(df_result):

  1. df_result的结构/单元是从df1复制的
  2. 对于df1中的计数<6,请改用df2中的相应值。

INPUT1:df1

Type_lv1  Type_lv2          diff
                         count mean
t1           t_a              1    0.02
             t_b              12   0.01
t2           t_a              5    0.12
             t_b              22   0.11

INPUT2:df2

Type_lv1         diff
               count mean
t1             13    0.011
t2             27    0.11

输出:df_result

Type_lv1  Type_lv2          diff_result
                             mean
t1           t_a              0.011
             t_b              0.01
t2           t_a              0.11
             t_b              0.11

在上面的样本数据中,由于df1中的计数为1和5(小于阈值6),因此df_result中的第一行和第三行来自df2。 我曾尝试在过去的问题中找到相关的样本,但可以得到我想要的。有人可以给我一些指示吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

想法是将df1的第二个级别从df2添加到MultiIndex,因此在最后一步中可能会根据条件重新分配,只有在两个DataFrame中都必须匹配MultiIndex的第一级别s:

m = df1[('diff','count')] < 6

mux = pd.MultiIndex.from_product([df2.index.unique(), 
                                  df1.index.get_level_values(1).unique()])
df3 = df2.reindex(mux, level=0)

df1.loc[m, ('diff','mean')] = df3[('diff','mean')]
print (df1)
                   diff       
                  count   mean
Type_lv1 Type_lv2             
t1       t_a          1  0.011
         t_b         12  0.010
t2       t_a          5  0.110
         t_b         22  0.110