Pandas:根据列上的条件从DataFrame中选择行

2024-05-23 15:22:07 发布

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

我正在做一个项目,我必须从纵横字谜数据集中提取(id、线索、答案、答案、数据、来源、答案发生率)。例如1222528,壁炉的砖地板,壁炉,7.02015-01-01,pk,1)答案出现5次以上但线索不同的线条(答案发生率实际上是答案出现在同一条线索上的次数),但我不确定怎么做。 我使用value_counts()创建一个包含答案出现次数的列表,然后删除出现次数少于5次的答案:

dropped_labels = []
for key, val in train_data["answer"].value_counts().items():
    if val < 5:
        dropped_labels.append(key)
        
fives = train_data["answer"].value_counts().drop(labels=dropped_labels)
>>>fives
ONE      77
ART      72
ERA      71
ARIA     67
TEE      60
         ..
DIOR      5
BIRTH     5
SIEVE     5
IONE      5
BESO      5

现在,我应该从train_data中选择具有fives相同元素的answer字段的行,但是我被卡住了,因为我使用的所有东西都失败得很惨。有没有我可以使用的内置函数? 我是Python新手,请善待我。:)


Tags: 数据key答案answerdatalabelsvaluetrain
2条回答

您可以将这两列转换为大小相等的列表,并使用clu查找答案和线索

function(ans,clu)
    ignorelist = []
    result = []
    for answer in ans: #main loop, ans by answer
        counter = 0
        index_lists = []
        ignorelist = []
        for index in range(len(ans)):
            if ans[index] = answer and clu[index] not in ignorelist
                ignorelist.append(clu[index])
                counter = counter + 1
                index_lists.append(index)
        if counter >=5
            result.append(index_lists)
    return list(dict.fromkeys(result))

这是未经测试的,我还没有看到你的数据,但希望它能有所帮助

已解决:

to_hold = train_data['answer'].value_counts() >= 5
to_hold = [key for key, value in to_hold.items() if value == True]
df = train_data[train_data['answer'].isin(to_hold)]

相关问题 更多 >