我正试图从3个特定客户端获得最多的访问时间,我已经这样做了:
mostUserDict = dict(df['user_id'].value_counts())
mostClientDict = dict(df['client_id'].value_counts())
print(mostClientDict)
这将按desc顺序返回具有更多访问权限的用户,如:
{1480: 96, 1610: 94, 1607: 80, 1375: 74, 1710: 65, 1477: 58, 1691: 58, 1729: 44, 1717: 42,...}
获取所有用户的小时数:
clientsHours = df[['client_id', 'hour']].groupby('client_id').agg(lambda x: x.value_counts().index[0])
print(clientsHours)
client_id
901 18
1339 19
1372 11
1375 12
1379 20
... ...
现在我需要从第一个字典中的前3个用户(在本例中为1480,1610,1607)中获取小时数。我知道我可以使用for循环,但有其他方法吗?
如果我理解正确,您可以获得前3名客户,然后像这样汇总他们的工时值:
import pandas as pd
df = pd.read_csv("your_data_set")
top_3_clients = df["client_id"].value_counts().head(3).index
df = df[df["client_id"].isin(top_3_clients)]
aggregate_hours = df.groupby("clientId").agg({"hours": "sum"})
你根据他们的价值计数获得所有客户,你保留前3名。然后只使用这3个过滤DataFrame,并聚合它们的hour
列以求和。
如果需要多于3,只需将head(3)
更改为所需的数字。