比较两个不同数据帧的两列

时间:2016-03-01 18:53:52

标签: python pandas analysis

最近,我用pandas从matlab切换到了python。它一直很好用,但我坚持有效地解决以下问题。对于我的分析,我必须看起来像这样的数据帧:

dfA =
     NUM      In        Date
0   2345    we 1    01/03/16
1   3631    we 1    23/02/16
2   2564    we 1    12/02/16
3   8785    sz 2    01/03/16
4   4767    dt 6    01/03/16
5   3452    dt 7    23/02/16
6   2134    sz 2    01/03/16
7   3465    sz 2    01/03/16

dfB
    In   Count_Num
0   we 1         3
1   sz 2         2
2   dt 6         3
3   dt 7         1

我想要执行的是一个操作,它将dfA中所有“In”的所有“Num”相加,并将其与dfB中的“Count_num”进行比较。之后,我想在dfB中添加一列,如果比较为True或False则返回。在上面的示例中,操作应该返回:

dfB
    In   Count_Num   Check
0   we 1         3   True
1   sz 2         2   False
2   dt 6         1   True 
3   dt 7         1   True

我的方法:

使用value_counts()和pd.DataFrame,我从dfA构造了以下dfC     dfC =

   In_Number       In_Total
0       we 1              4
1       sz 2              3
2       dt 6              1
3       dt 7              1

然后我将它与dfB合并以通过比较dfB中的列来检查它是否相同。在这种情况下,我必须结束删除列。有更好/更快的方法吗?我认为有一种方法可以非常有效地使用熊猫的一个很棒的功能。我试图调查lookupmap,但我无法让它发挥作用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以按dfBdfAIncheckNUM,然后添加新列print dfA NUM In Date 0 2345 we 1 01/03/16 1 3631 we 1 23/02/16 2 2564 we 1 12/02/16 3 8785 sz 2 01/03/16 4 4767 dt 6 01/03/16 5 3452 dt 7 23/02/16 6 2134 sz 2 01/03/16 7 3465 sz 2 01/03/16 print dfB In Count_Num 0 we 1 3 1 sz 2 2 2 dt 6 3 3 dt 7 1 }用于比较合并列和上一个mergeprint dfA.groupby('In', as_index=False)['NUM'].count() In NUM 0 dt 6 1 1 dt 7 1 2 sz 2 3 3 we 1 3 df = pd.merge(dfB, dfA.groupby('In', as_index=False)['NUM'].count(), on=['In']) print df In Count_Num NUM 0 we 1 3 3 1 sz 2 2 3 2 dt 6 3 1 3 dt 7 1 1 df['check'] = df['NUM'] == df['Count_Num'] df = df.drop('NUM', axis=1) print df In Count_Num check 0 we 1 3 True 1 sz 2 2 False 2 dt 6 3 False 3 dt 7 1 True

drop
df = pd.merge(dfB, dfA.groupby('In', as_index=False)['NUM'].count(), on=['In'])
print df
     In  Count_Num  NUM
0  we 1          3    3
1  sz 2          2    3
2  dt 6          3    1
3  dt 7          1    1

df['NUM'] = df['NUM'] == df['Count_Num'] 
df = df.rename(columns={'NUM':'Check'})
print df
     In  Count_Num  Check
0  we 1          3   True
1  sz 2          2  False
2  dt 6          3  False
3  dt 7          1   True

或者您可以在没有JSON.stringify的情况下使用groupby

JSON.parse(JSON.stringify(store.get("rulesets")));