簡體   English   中英

基於另一個DataFrame中的兩列對pandas DataFrame進行子集

[英]Subset pandas DataFrame based on two columns in another DataFrame

我有如下所示的pandas DataFrame。 df1df2都是df子集。 我現在想創建df兩個新子集,我們將其dftrndftst dftrn應該包含df1df2所有df df2 dftst應該包含不在df1df2df 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]
})

我希望dftrndftst看起來像什么( 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

concatisin

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM