[英]Compare two columns of two different dataframes
最近,我使用熊猫从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”进行比较。 之后,如果比较结果为True或False,我想在dfB中添加一列以返回。 在上面的示例中,该操作应返回以下内容:
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中的列来检查其值是否相同。 在这种情况下,我必须结束删除列。 有没有更好/更快的方法来做到这一点? 我认为有一种方法可以有效地利用熊猫的一项出色功能。 我试图研究lookup
和map
,但是无法使其正常工作。
谢谢您的帮助!
您可以尝试merge
dfB
和dfA
与groupby
merge
, dfA
In
列进行count
,然后为比较合并的列和最后drop
列NUM
添加新的列check
:
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
print 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
或者您可以使用rename
而不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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.