我需要python帮助(我正在使用pandas)。 任务: 对于每个单元格和日期,确定每小时连接用户的3个最高出现次数(小时),并计算这3个值的平均值。
我有一个136000个单元格(行),列名称并不重要,我们称之为“日期”和“用户”(已连接的用户)。
答案 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)