Skip to main content
 首页 » 编程设计

python之遍历 Pandas 数据框并应用条件的正确方法是什么

2024年08月12日30zhoujg

我正在尝试遍历字典列表,将值与 Pandas 数据框中的一对列进行比较,并在特定条件下将值添加到第三列。

我的字典列表如下所示:

dict_list = [{'type': 'highlight', 'id': 0, 'page_number': 4, 'location_number': 40, 'content': 'Foo'}, {'type': 'highlight', 'id': 1, 'page_number': 12, 'location_number': 96, 'content': 'Bar'}, {'type': 'highlight', 'id': 2, 'page_number': 128, 'location_number': 898, 'content': 'Some stuff'}] 

我的数据框是这样的:

    start    end  note_count 
1       1    100           0 
2     101    200           0 
3     201    300           0 

对于每个字典,我想提取“page_number”值并将其与数据框行中的“开始”和“结束”列进行比较。如果 page_number 在一行中的这两个值的范围内,我想对该行的“note_count”列 +1。这是我当前的代码:

for dict in dict_list: 
    page_number = dict['page_number'] 
    for index, row in ventile_frame.iterrows(): 
        ventile_frame["note_count"][(ventile_frame["start"] <= page_number) & (ventile_frame["end"] >= page_number)] += 1 
print (ventile_frame) 

我希望看到这样的结果。

    start    end  note_count 
1       1    100           2 
2     101    200           1 
3     201    300           0 

相反,我看到了这个。

    start    end  note_count 
1       1    100           9 
2     101    200           0 
3     201    300           0 

感谢您的帮助!

请您参考如下方法:

您不需要迭代 ventile_frame 的行- 这就是它的美妙之处!

(ventile_frame["start"] <= page_number) & (ventile_frame["end"] >= page_number)将产生一个 bool 掩码,指示是否 page_number在每一行的范围内。尝试使用 page_number 的固定值了解发生了什么:

print((ventile_frame["start"] <= 4) & (ventile_frame["end"] >= 4)) 

底线是,您只需要迭代字典:

for single_dict in dict_list: 
    page_number = single_dict['page_number'] 
    ventile_frame["note_count"][(ventile_frame["start"] <= page_number) & (ventile_frame["end"] >= page_number)] += 1 
print (ventile_frame) 

请注意,我替换了 dict通过 single_dict在上面的代码中,最好避免隐藏内置的 Python 名称。