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

2024-09-28 03:13:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,让我们以分类列FrequencyPaymentMode为例。训练集的频率有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']

我想要的是从培训集中删除“双月”和“代管”的样本,因为这些是it的专属样本。我尝试过这个,但有一个错误:

data.loc[data[["Frequency", "PaymentMode"]].isin(valData[["Frequency", "PaymentMode"]])]

ValueError: Cannot index with multidimensional key

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


Tags: infordata分类col频率ecsprint
1条回答
网友
1楼 · 发布于 2024-09-28 03:13:32

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

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

相关问题 更多 >

    热门问题