Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多个条件筛选数据帧中的行_Python_Pandas_Data Munging - Fatal编程技术网

Python 使用多个条件筛选数据帧中的行

Python 使用多个条件筛选数据帧中的行,python,pandas,data-munging,Python,Pandas,Data Munging,考虑一个有4列的数据帧- 交易ID(唯一ID)-101102103 货币对(具体清单)-澳元、英镑、新西兰元 名义数量(数字)-两行可以相同 交易类型(仅两种)-买入/卖出 因此,我希望找出在货币对、名义数量上相似但交易类型相反的行——买入和卖出 import pandas as pd trade_id=[1,2,3,4,5,6] #dtype = int64 ccy_pairs=['AUD','AUD','GBP','EUR','NZD','NZD']#dtype = str noti

考虑一个有4列的数据帧-

  • 交易ID(唯一ID)-101102103
  • 货币对(具体清单)-澳元、英镑、新西兰元
  • 名义数量(数字)-两行可以相同
  • 交易类型(仅两种)-买入/卖出
因此,我希望找出在货币对、名义数量上相似但交易类型相反的行——买入和卖出

import pandas as pd


trade_id=[1,2,3,4,5,6] #dtype = int64
ccy_pairs=['AUD','AUD','GBP','EUR','NZD','NZD']#dtype = str
notional=[1,1,1.5,2,6,7]#dtype = int64
trade_type=['buy','sell','buy','sell','buy','buy']#dtype = str
value_date=['01012018', '03012019', '05062018','03062018','07082018','09082020']#dtype = datetime

df=pd.DataFrame() #dataframe comprising of many other columns
df['trade_id']=trade_id
df['ccy_pairs']=ccy_pairs
df['notional']=notional
df['trade_type']=trade_type
df['value_date']=value_date



#Output expected - Looking to highlight the offsetting legs of the trade ( i.e. trades having same notional and ccy pair,
#but different trade types )

Trade Id|CCY Pair|Notional|Trade_type|value_date
1 aud 1 Buy 01012018
3 gbp 1.5 Buy 05062018
4 eur 2 Sell 07062018
5 nzd 6 Buy 07082018
6 nzd 7 Buy 09092020
这意味着2行在CCY上匹配了一个概念,但有相反的分支(买入和卖出),导致其中一行(或)被丢弃

您需要:

df.drop_duplicates(subset=['ccy_pairs','notional'], keep='first', inplace=True)
输出

    trade_id    ccy_pairs   notional    trade_type  value_date
0   1            AUD        1.0          buy         01012018
2   3            GBP        1.5          buy         05062018
3   4            EUR        2.0          sell        03062018
4   5            NZD        6.0          buy         07082018
5   6            NZD        7.0          buy         09082020

有关更多详细信息,请参阅要删除的两行(其中一行)的条件:

“(在
ccy\u对
名义
中重复的行)和(在
交易类型中不重复的行
)”

drop_duplicates
不会检查相反的支腿(买卖)。 您可以尝试这样做(我假设总是删除第二个查找(
.index[1]
):


希望这能帮你解决这个问题@AkshayNevrekar
希望突出显示偏移腿
。这是什么意思?你能编辑你的问题以包含你期望的精确输出吗?
dups = df.ccy_pairs[df.ccy_pairs.duplicated()] # to get AUD and NZD

for i in dups: # to check opposing legs
    if df.trade_type[df.ccy_pairs == i].nunique() == 2:
        df.drop(df[df.ccy_pairs == i].index[1], inplace=True)