我这里有一个训练和测试数据集。训练集比测试集具有更多独特的分类值,我想从训练集中过滤出实际上仅针对训练集的那些行。
例如,让我们使用分类列Frequency
和PaymentMode
。训练集的频率有4个唯一值,频率为11个。但是,对于测试集,我分别具有3和10个唯一值(每列少1个)。
for col in data.columns:
if data[col].dtype == "object":
print(col)
print(data[col].unique())
print('')
Frequency
['Monthly' 'Quatrly' 'Half Yearly' 'BI-Monthly']
PaymentMode
['PDC_E' 'PDC' 'Direct Debit' 'Billed' 'ECS' 'Auto Debit' 'SI Reject'
'ECS Reject' 'Cheque' 'PDC Reject' 'Escrow']
for col in valData.columns:
if valData[col].dtype == "object":
print(col)
print(valData[col].unique())
print('')
Frequency
['Monthly' 'Quatrly' 'Half Yearly']
PaymentMode
['PDC_E' 'PDC' 'Billed' 'Direct Debit' 'ECS' 'ECS Reject' 'SI Reject'
'Cheque' 'Auto Debit' 'PDC Reject']
我想要的是将“双月”和“托管”的样本从训练集中删除,因为这些样本仅是针对它的。我已经尝试过但是有一个错误:
data.loc[data[["Frequency", "PaymentMode"]].isin(valData[["Frequency", "PaymentMode"]])]
ValueError: Cannot index with multidimensional key
在熊猫中,还有另一种方法可以不单独指定要删除的值吗?
在这种情况下,您不能使用多列。结合使用两个过滤器,要求两列都没有测试中不存在的因素应该起作用:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句