Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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 - Fatal编程技术网

Python 如何根据从另一个数据集中匹配的唯一值从数据集中删除行?

Python 如何根据从另一个数据集中匹配的唯一值从数据集中删除行?,python,pandas,Python,Pandas,我这里有一个培训和测试数据集。与测试集相比,训练集具有更多的唯一的分类值,我想从训练集中筛选出那些实际上只对训练集独占的行 例如,让我们以分类列Frequency和PaymentMode为例。训练集的频率有4个唯一值,频率有11个唯一值。但是,对于测试集,我分别有3个和10个唯一值(每列少1个) 对于data.columns中的列: 如果数据[col].dtype==“对象”: 打印(col) 打印(数据[col].unique()) 打印(“”) 频率 [“每月”“每季度”“每半年”“每两个月

我这里有一个培训和测试数据集。与测试集相比,训练集具有更多的唯一的分类值,我想从训练集中筛选出那些实际上只对训练集独占的行

例如,让我们以分类列
Frequency
PaymentMode
为例。训练集的频率有4个唯一值,频率有11个唯一值。但是,对于测试集,我分别有3个和10个唯一值(每列少1个)

对于data.columns中的列:
如果数据[col].dtype==“对象”:
打印(col)
打印(数据[col].unique())
打印(“”)
频率
[“每月”“每季度”“每半年”“每两个月”]
付款方式
['PDC_E''PDC''直接借记''账单''ECS''自动借记''SI拒绝'
“ECS拒绝”“支票”“PDC拒绝”“托管”]
对于valData.columns中的列:
如果valData[col].dtype==“对象”:
打印(col)
打印(valData[col].unique())
打印(“”)
频率
[“每月”“每季度”“每半年”]
付款方式
['PDC_E''PDC''账单''直接借记''ECS''ECS拒绝''SI拒绝'
“支票”“自动借记”“PDC拒绝”]
我想要的是从培训集中删除“双月”和“代管”的样本,因为这些是it的专属样本。我尝试过这个,但有一个错误:

data.loc[data[[“Frequency”,“PaymentMode”]].isin(valData[[“Frequency”,“PaymentMode”]])]
ValueError:无法使用多维键进行索引

pandas中是否有其他方法不单独指定要删除的值?

在这种情况下不能使用多列。两个过滤器的组合,要求两个列没有测试中不存在的因素,应该可以工作:

data = pd.DataFrame({'Frequency':np.random.choice(['Monthly','Quatrly','Half Yearly','BI-Monthly'],100),
'PaymentMode':np.random.choice(['Cheque','PDC Reject','Escrow'],100)})

valData = pd.DataFrame({'Frequency':np.random.choice(['Monthly','Quatrly','Half Yearly'],100),
'PaymentMode':np.random.choice(['Cheque','PDC Reject',],100)})

da = data[(data["Frequency"].isin(valData["Frequency"]) & data["PaymentMode"].isin(valData["PaymentMode"]))]

pd.crosstab(da['Frequency'],da['PaymentMode'])
Out[25]: 
PaymentMode  Cheque  PDC Reject
Frequency                      
Half Yearly       9           5
Monthly           9          11
Quatrly           7           6

精确而优雅:)