pandas isin不过滤多列上的数据

时间:2018-12-08 05:08:42

标签: python pandas

漂亮

    name      date   time      open      high       low     close
0  NIFTY  20180903  09:16  11736.05  11736.10  11699.35  11700.15
1  NIFTY  20180903  09:17  11699.00  11707.60  11699.00  11701.85
2  NIFTY  20180903  09:18  11702.65  11702.65  11690.95  11692.40
3  NIFTY  20180903  09:19  11692.55  11698.10  11688.65  11698.10
4  NIFTY  20180903  09:20  11698.40  11698.40  11687.25  11687.70

选项

      date      time    option_type  strike_price    open    high       low     close  volume  
0     20180903  09:15          CE         11500     313.65  319.10      296.00  299.80    5250 
1     20180903  09:16          CE         11500     299.00  303.85      299.00  300.60    3975  
2     20180903  09:17          CE         11500     299.05  302.30      290.65  293.25    4500
3     20180903  09:18          CE         11500     294.95  300.00      291.00  300.00    1500 
4     20180903  09:19          CE         11500     300.50  300.50      295.60  295.60     975 

在两个dfs中,我只想过滤两个日期和时间都存在的行。我已经尝试过isin了。但是它没有按预期工作。

option=option[(option.date.isin(nifty.date)) & (option.time.isin(nifty.time))]  
nifty=nifty[(nifty.date.isin(option.date)) & (nifty.time.isin(option.time))]

有人可以帮我吗?我的预期输出是:

漂亮

    name      date   time      open      high       low     close
0  NIFTY  20180903  09:16  11736.05  11736.10  11699.35  11700.15
1  NIFTY  20180903  09:17  11699.00  11707.60  11699.00  11701.85
2  NIFTY  20180903  09:18  11702.65  11702.65  11690.95  11692.40
3  NIFTY  20180903  09:19  11692.55  11698.10  11688.65  11698.10

选项

      date      time    option_type  strike_price    open    high       low     close  volume  

1     20180903  09:16          CE         11500     299.00  303.85      299.00  300.60    3975  
2     20180903  09:17          CE         11500     299.05  302.30      290.65  293.25    4500
3     20180903  09:18          CE         11500     294.95  300.00      291.00  300.00    1500 
4     20180903  09:19          CE         11500     300.50  300.50      295.60  295.60     975 

1 个答案:

答案 0 :(得分:1)

仅在“日期”和“时间”上使用merge,这样,您的df都将返回匹配值的子集;

nifty_ = nifty.merge(option[['date','time']])

option_ = option.merge(nifty[['date', 'time']])