对于每个单元格和日期确定Python中出现的最高次数为3次

时间:2017-01-31 00:08:05

标签: python pandas

我需要python帮助(我正在使用pandas)。 任务: 对于每个单元格和日期,确定每小时连接用户的3个最高出现次数(小时),并计算这3个值的平均值。

我有一个136000个单元格(行),列名称并不重要,我们称之为“日期”和“用户”(已连接的用户)。

I can't post original file, but here is similar

1 个答案:

答案 0 :(得分:1)

首先,我没有多大地使用过熊猫,但我试图从你的问题中构建一个例子。

编辑:根据示例数据更新。

该示例应该让您入门,它会加载您的数据并分析一个日期。它可能会被简化很多,我无法判断您的数据中是否存在特殊情况,脚本不会考虑这些情况。您还必须至少调整列名称。

import pandas as pd

data = pd.read_excel("Workbook1.xlsx")

users_active = {}
for i in range(len(data)):
    current_hour = int(data['Date'][i].split("-")[0].split(" ")[1].split(":")[0])
    end_hour = int(data['Date'][i].split("-")[1].split(":")[0])
    if end_hour - current_hour > 1:
        for hour in range(end_hour - current_hour - 1):
            incumbent = current_hour + hour + 1
            stamp = data['Date'][i].split(" ")[0]
            stamp += " "+str(incumbent)+":00"
            try:
                users_active[stamp] += data['Users'][i]
            except KeyError:
                users_active[stamp] = data['Users'][i]
    stamp = current_hour = data['Date'][i].split("-")[0]
    try:
        users_active[stamp] += data['Users'][i]
    except KeyError:
        users_active[stamp] = data['Users'][i]

date = "1.16.2017"

users_sorted = sorted(users_active, key = users_active.get, reverse = True)
found, idx, mean, tophour = 0, 0, 0, []

while found < 3:
    if date in users_sorted[idx]:
        mean += users_active[users_sorted[idx]]/3
        found += 1
        tophour.append(users_sorted[idx])
    idx += 1

print(mean, tophour)