如何在数据框Python熊猫中匹配数据

时间:2020-02-23 00:26:23

标签: python pandas

我正在尝试将数据与数据框中的数据进行匹配。我当前尝试的方式不起作用。经过研究,我相信我只会选择“要么”,要么不会。我有想要与开盘价和收盘价相匹配的交易,而忽略其余交易。结果仍然显示未完成的交易。

代码:

# import important stuffs
import pandas as pd

# open file and sort through options only and pair opens to closes
with open('TastyTrades.csv'):
    trade_reader = pd.read_csv('TastyTrades.csv')  # create reader
    options_frame = trade_reader.loc[(trade_reader['Instrument Type'] == 'Equity Option')]  # sort for options only
    BTO = options_frame[options_frame['Action'].isin(['BUY_TO_OPEN', 'SELL_TO_CLOSE'])]  # look for BTO/STC
    STO = options_frame[options_frame['Action'].isin(['SELL_TO_OPEN', 'BUY_TO_CLOSE'])]  # look for STO/BTC
    paired_frame = [BTO, STO]  # combine
    results = pd.concat(paired_frame)  # concat
    results_sorted = results.sort_values(by=['Symbol', 'Call or Put', 'Date'], ascending=True)  # sort by symbol
    results_sorted.to_csv('new_taste.csv')  # write new list

结果:

310,2019-12-19T15:47:24-0500,Trade,SELL_TO_OPEN,APA   200117P00020000,Equity Option,Sold 1 APA 01/17/20 Put 20.00 @ 0.33,33,1,33.0,-1.0,-0.15,100.0,APA,1/17/2020,20.0,PUT
296,2019-12-31T09:30:07-0500,Trade,BUY_TO_CLOSE,APA   200117P00020000,Equity Option,Bought 1 APA 01/17/20 Put 20.00 @ 0.08,-8,1,-8.0,0.0,-0.14,100.0,APA,1/17/2020,20.0,PUT
8,2020-02-14T12:19:30-0500,Trade,BUY_TO_OPEN,AXAS  200918C00002500,Equity Option,Bought 2 AXAS 09/18/20 Call 2.50 @ 0.05,-10,2,-5.0,-2.0,-0.28,100.0,AXAS,9/18/2020,2.5,CALL
172,2020-01-28T10:05:14-0500,Trade,SELL_TO_OPEN,BAC   200320C00033000

正如您在此处看到的,我有一个完整的交易:APA,一个交易的一半:AXAS,以及一个完整的交易的前一半:BAC。我不想在那里看到AXAS。无论我尝试摆脱它们多少次,AXAS和其他应用程序都会不断弹出。

1 个答案:

答案 0 :(得分:1)

现在,您只选择所有打开和所有关闭,然后将它们堆叠;没有实际的配对。如果我对您的理解正确,那么您只想在数据集中包含同时具有未平仓交易和平仓交易的交易?如果是这种情况,我建议找到交易ID的设置交集,然后使用它来选择配对的交易。假定您数据中的第五列(例如“ APA 200117P00020000”)是TransactionID,看起来像下面的代码。

import pandas as pd

trade_reader =  pd.read_csv('TastyTrades.csv')
options_frame = trade_reader.loc[
    (trade_reader['Instrument Type'] == 'Equity Option')
] # sort for options only

opens = options_frame[
    options_frame['Action'].isin(['BUY_TO_OPEN', 'SELL_TO_OPEN'])
] # look for opens
closes = options_frame[
    options_frame['Action'].isin(['BUY_TO_CLOSE', 'SELL_TO_CLOSE'])
] # look for closes

# Then create the set intersection of the open and close transaction IDs
paired_ids = set(opens['TransactionID']) & set(closes['TransactionID'])
paired_transactions = options_frame[
    options_frame['TransactionID'].isin(paired_ids)
] # And use those to select the paired items

results = paired_transactions.sort_values(
    by=['Symbol', 'Call or Put', 'Date'],
    ascending=True
) # sort by symbol
results.to_csv('NewTastyTransactions.csv')