Python 如何区分dataframe列中的唯一值并对其其他列进行计数?
我有一个像这样的数据框。如您所见,我已经执行了10个迭代步骤来获得以下结果 在一行中,B列描述了一个特定的人,而D列和E列确定了x y点的位置,因为它们位于第n帧中 我的问题是,如何在每次迭代中进行计数,以确定是否有人超时站在感兴趣的区域周围?如果它们位于感兴趣的区域,我可以将计数器增加1Python 如何区分dataframe列中的唯一值并对其其他列进行计数?,python,dataframe,if-statement,Python,Dataframe,If Statement,我有一个像这样的数据框。如您所见,我已经执行了10个迭代步骤来获得以下结果 在一行中,B列描述了一个特定的人,而D列和E列确定了x y点的位置,因为它们位于第n帧中 我的问题是,如何在每次迭代中进行计数,以确定是否有人超时站在感兴趣的区域周围?如果它们位于感兴趣的区域,我可以将计数器增加1 region_x = np.min(monitor_region[:,0]) region_y = np.min(monitor_region[:,1]) region_width = monitor_reg
region_x = np.min(monitor_region[:,0])
region_y = np.min(monitor_region[:,1])
region_width = monitor_region.shape[1]
region_height = monitor_region.shape[0]
counter = 0
#Looking for logic here to distinguish specific person based on column B value
if((region_x < person["point_x"] < (region_x + region_width)) and (region_y < person["point_y"] < (region_y + region_height))):
print(counter += 1)
理想的结果是,我可以使用if语句来增加感兴趣区域内每个个体的计数器
例如,1号人物在感兴趣区域站立了3次。
人物2在感兴趣的区域站立了10次。将人物和计数存储在字典中 注意:我认为这需要python>=3.6,但仅适用于字典末尾的f字符串打印
from collections import defaultdict
from pprint import pprint
from random import randint
import numpy as np
def fetch_data():
return {
"Person": randint(1, 10),
"Frame": randint(1, 10),
"X": randint(0, 500),
"Y": randint(1, 10),
}
people_in_roi = defaultdict(lambda: 0)
for i in range(100):
data = fetch_data()
if data["X"] > 250:
people_in_roi[data["Person"]] += 1
for k, v in people_in_roi.items():
print(f"Person: {k}\tIn ROI count: {v}")
输出:
Person: 4 In ROI count: 3
Person: 2 In ROI count: 7
Person: 9 In ROI count: 8
Person: 3 In ROI count: 2
Person: 1 In ROI count: 3
Person: 10 In ROI count: 4
Person: 5 In ROI count: 5
Person: 8 In ROI count: 2
Person: 7 In ROI count: 3
Person: 6 In ROI count: 4
如果你链接到某个地方的数据,我可以提供一个工作的例子,但我已经回答了一些应该让你接近@KevinGlasson您能否提供您回答此类问题的来源的链接?在每一次迭代的第0到第10帧中,我都会随着处理的每一步进行计数,而不是等待完成的数据,只执行操作。啊,我没有意识到你必须处理即将到来的数据,我会尝试更新我的回答更新,它处理一行数据,然后在获得下一行数据之前对其进行处理。它工作得非常好,谢谢。起初,我认为,创建一个独特的人员列表,然后将其作为关键字附加到字典中。因此,每个关键人物都存储一个x,y的列表。你认为这是一个好办法吗?我可能很难访问列表中的每个索引。