我尝试循环浏览字典列表,将一个值与数据帧中的一对列进行比较,并在特定条件下向第三列添加一个值。你知道吗
我的词典列表如下所示:
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\u number”值并将其与dataframe行中的“start”和“end”列进行比较。如果页码在一行中这两个值的范围内,我想在该行的“note\u 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)
将生成一个布尔掩码,指示page_number
是否在每行的范围内。用page_number
的固定值尝试一下,以了解发生了什么:最重要的是,你只需要迭代一下:
注意,在上面的代码中,我将
dict
替换为single_dict
,最好避免隐藏内置python名称。你知道吗我会用^{} 来做这个:
首先用字典中包含的页数创建一个系列:
那么, 对于数据帧的每一行,您确定序列的值是否在
'start'
和'end'
之间,以及总和是否在下面是一种使用^{} 的方法:
输出:
详情: 一旦我们把索引设为区间,就把
m
和.loc[]
的索引设为page_number
然后使用
groupby()
get counts,转换为Multiindex并将其赋值。你知道吗相关问题 更多 >
编程相关推荐