【问题标题】:Compare two similar columns in different data frames and take unmerged rows for both data frame比较不同数据框中的两个相似列,并为两个数据框取未合并的行
【发布时间】:2020-06-20 22:44:33
【问题描述】:

我有两个数据框(df1 和 df2),这两个有 100 多列。 JA 列是 id 列。我想一次比较两列,并从两个数据帧中获得未合并的结果,就像 df3.我为 BC 列创建了 df3。我想为整个数据框这样做。我的意思是我必须一一检查每一列,而不是一次检查所有列。当我检查一列时,我想创建类似 df3 的内容。有没有办法做到这一点。

df1
       JA      AB     BC   fas   waa   ad
1      1       ace    52    5     2    ce
2      22      a e    3     5    78    ce
3      36      nas    4     4     5    as
4      45      kas    25    2    19    as
5      51                  25          sd
6      61      nas    45    8    32    as
7      897       a    34   13    34    qr
8      88      nas         12    0     as
9      29      jaa    1    10    45    aw
10     18      saa    34    0    98    aa

df2
       JA      AB     BC   fas   waa   ad
1      1       ace    52    5     2    ce
2      22      ace     3    5    18    ce
3      36      nas     1    4     5    as
4      45      kas    25   12    19    ms
5      51              5    5          sd
6      61      nas    45    8    32    as
7      897     paa    34   23          qr
8      88      nas    11   12     0    as
9      29       aa         10     5    aw
10     18      saa    34    0    98     a
 

df3
JA     BCdf1    BCdf2
36       4         1
51                 5
88                11
29       1

【问题讨论】:

  • 两个dsataframe是一样的,你能查一下
  • 你很抱歉。我只是更新它。你知道有什么方法可以做到这一点

标签: python pandas dataframe


【解决方案1】:

处理流程:。

  1. pandas.eq() 用于通过比较两个数据帧来创建掩码。
  2. 在 df1 和 df2 以及 df2 和 df1 之间进行比较。
  3. 通过连接每一列来重新排序。
maskA = df1.eq(df2)

JA  AB  BC  fas waa ad
1   True    True    True    True    True    True
2   True    False   True    True    False   True
3   True    True    False   True    True    True
4   True    True    True    False   True    False
5   True    False   False   False   False   True
6   True    True    True    True    True    True
7   True    False   True    False   False   True
8   True    True    False   True    True    True
9   True    False   False   True    False   True
10  True    True    True    True    True    False

df_1 = df1[~maskA].fillna('')
maskB = df2.eq(df1)
df_2 = df2[~maskB].fillna('')
df_1['JA'].update(df1['JA'])
df_2['JA'].update(df2['JA'])

df_all = pd.merge(df_1, df_2, on='JA', suffixes=('_df1','_df2')).sort_index(axis=1)
cols = ['JA','AB_df1','AB_df2','BC_df1','BC_df2','ad_df1','ad_df2','fas_df1','fas_df2','waa_df1','waa_df2']
df_all.loc[:,cols]

df_all
    JA  AB_df1  AB_df2  BC_df1  BC_df2  ad_df1  ad_df2  fas_df1 fas_df2 waa_df1 waa_df2
0   1                                       
1   22  a e ace                         78  18
2   36          4   1                       
3   45                  as  ms  2   12      
4   51              5           25  5       
5   61                                      
6   897 a   paa                 13  23  34  
7   88              11                      
8   29  jaa aa  1                       45  5
9   18                  aa  a               

【讨论】:

    猜你喜欢
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多