我正在尝试遍历字典列表,将值与 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 名称。
