逐行过滤数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逐行过滤数据相关的知识,希望对你有一定的参考价值。
嗨,我是一个初学python用户,我需要一些帮助。我试图将一个数据帧与另一个数据帧进行过滤。
DF1
date emp# sku transaction#
2017-01-01 10 200 399
2017-01-01 10 201 399
2017-01-01 10 202 399
2017-01-01 11 203 399
2017-01-01 11 200 399
DF2
date emp# sku transaction#
2017-01-01 10 200 301
2017-01-01 11 200 301
期望的Df1
date emp# sku transaction#
2017-01-01 10 200 399
2017-01-01 11 200 399
我知道这可以使用内连接(一个emp#和sku),但我会有错误的列,我怎么能这样做一个过滤器?
答案
这是没有pd.merge
的一种方式。这种方法的好处是您不必使用列名称。
df2 = df2.set_index(['emp#', 'sku'])
df2['transaction#'] = df1.set_index(['emp#', 'sku'])['transaction#']
df2 = df2.reset_index()
# emp# sku date transaction#
# 0 10 200 2017-01-01 399
# 1 11 200 2017-01-01 399
另一答案
使用merge
和on
参数:
Df1.merge(Df2, on=['date','emp#','sku'], suffixes=('','_y'))
.drop('transaction#_y', axis=1)
输出:
date emp# sku transaction#
0 2017-01-01 10 200 399
1 2017-01-01 11 200 399
另一答案
你可以通过将所需的列转换为字典,并将方向设置为df2
,从list
进行过滤,然后使用isin
检查存在的值。最后,取每行的min
以确保满足两个条件,即
False
False
+ =False
False
True
+ =False
True
False
+ =False
True
True
+ =True
cols = ['emp#','sku']
df1[df1[cols].isin(df2[cols].to_dict(orient='list')).min(1)]
date emp# sku transaction#
0 2017-01-01 10 200 399
4 2017-01-01 11 200 399
另一答案
您需要一个内部联接,它看起来像:保持仅在两者中的行:
df1.join(df2, how='inner')
以上是关于逐行过滤数据的主要内容,如果未能解决你的问题,请参考以下文章