0

我正在使用如下工作表:

日期/时间徽章名称
2013 年 10 月 31 日    
8:01:02 AM 131078 YEO, Nita
8:03:17 AM 415416 PEH, Wei
2013 年 10 月 30 日    
上午 8:11:02 131098 李,爱丽丝
8:53:17 AM 215416 EG, shi
...
  1. 我想统计一天内没有重复输入的人数。只是日期,而不是确切的时间。每个人都有一个唯一的徽章编号。

  2. 之后,我有另一个工作表,其中包含所有员工的徽章编号。我想比较使用此表输入的人以排除访问者,即两张表内的人仍然存在。然后数一下有多少。

总而言之,在一个月内,统计每天进入的员工人数,而不是访客人数。并根据日期绘制数字。

如何使用 excel、数据透视表或 VBA 来做到这一点?

4

2 回答 2

1

在 Excel 中,在最左侧添加一列,假设“日期/时间”在 B1 中,在 A2 中输入=IF(ISBLANK(C2),B2,A1)并向下复制以适应。复制 ColumnA 并选择性粘贴,将值粘贴到顶部。为(空白)过滤 ColumnC 并删除选定的行。加入DateA1。您的数据布局现在应该或多或少像@Brett 推荐的那样。


使用查找函数向每一行添加是否访问者的指示。

根据图像左侧的源数据构建的数据透视表将显示每日唯一徽章访问次数:

SO19764305 示例

过滤以仅n在“报告过滤器”字段中选择,并且您只有员工的等价物。

对于月度数据,请使用“组”(在“快速菜单”上)、“按”、“月”工具。

对于图表,从行标签中删除徽章并插入合适的图表。

于 2013-12-13T03:57:22.923 回答
1

像这样的东西

from collections import defaultdict

# collect all visitors in a dictionary where the key is the date, and
# the value is a set of badge numbers
visitorsPerDay = defaultdict(set)

# store the last read date value
currentDate = None

with open('filename') as f:
    for line in f:
        # if the line is 10 characters long, it’s a date line
        if len(line.strip()) == 10:
            # store the date value
            currentDate = line.strip()
        elif currentDate:
            # extract the badge number; if the file is tab
            # separated, even better: split by \t
            time, badge, _ = (part.strip() for part in line.split('   ', 2))

            # add the badge number to the set within the dictionary
            visitorsPerDay[currentDate].add(badge)

# now for every date, count the number of (unique) visitors
for date, visitors in visitorsPerDay.items():
    print(date, len(visitors))
于 2013-12-13T03:00:53.187 回答