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
精确而优雅:)