[英]Subset pandas dataframe on multiple columns based on values from another dataframe
[英]Subset pandas DataFrame based on two columns in another DataFrame
我有如下所示的pandas DataFrame。 df1
和df2
都是df
子集。 我現在想創建df
兩個新子集,我們將其dftrn
和dftst
。 dftrn
應該包含df1
和df2
所有df
df2
。 dftst
應該包含不在df1
和df2
的df
df2
。 最快的方法是什么?
df = pd.DataFrame({
'product': ['prod1', 'prod1', 'prod1', 'prod2', 'prod2', 'prod2'],
'date': ['2017-01-01', '2017-02-01', '2017-03-01', '2017-02-01', '2017-03-01', '2017-04-01'],
'value': [5.1, 5.2, 5.4, 2.3, 2.2, 2.4]
})
df1 = pd.DataFrame({
'product': ['prod1', 'prod1'],
'date': ['2017-02-01', '2017-03-01'],
'value': [5.1, 5.4]
})
df2 = pd.DataFrame({
'product': ['prod2', 'prod2'],
'date': ['2017-02-01', '2017-04-01'],
'value': [2.3, 2.4]
})
我希望dftrn
和dftst
看起來像什么( dftst
無關緊要):
dftrn
date product value
0 2017-02-01 prod1 5.2
1 2017-03-01 prod1 5.4
2 2017-02-01 prod2 2.3
3 2017-04-01 prod2 2.4
dftst
date product value
0 2017-01-01 prod1 5.1
1 2017-03-01 prod2 2.2
將concat
與isin
s=pd.concat([df1,df2])
df[df.apply(tuple,1).isin(s.apply(tuple,1))]
Out[77]:
date product value
2 2017-03-01 prod1 5.4
3 2017-02-01 prod2 2.3
5 2017-04-01 prod2 2.4
df[~df.apply(tuple,1).isin(s.apply(tuple,1))]
Out[78]:
date product value
0 2017-01-01 prod1 5.1
1 2017-02-01 prod1 5.2
4 2017-03-01 prod2 2.2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.