使用Python Pandas处理用户登录数据并按指定格式输出统计结果
Pandas 统计用户登录行为指标实现方案
原始数据集格式
event_date | user_id | user_city | user_state | 06-09-2021 | 23 | Thane | Maharashtra 04-09-2021 | 3224 | Madurai | Tamil Nadu 02-08-2021 | 2331 | Ghaziabad | Utter Pradesh
实现代码
import pandas as pd # 读取并清洗数据 df = pd.read_csv("login_data.csv", sep="|", skipinitialspace=True) # 清除多余空列、字段两端空格 df = df.dropna(axis=1, how="all") df.columns = df.columns.str.strip() for col in df.select_dtypes(include="object").columns: df[col] = df[col].str.strip() # 转换日期格式用于排序 df["event_date"] = pd.to_datetime(df["event_date"], format="%d-%m-%Y") # 自定义每个用户的统计逻辑 def user_stat_calc(group): # 按登录时间倒序排序取最新记录 group = group.sort_values("event_date", ascending=False).reset_index(drop=True) latest = group.iloc[0] # 统计城市登录频次 city_rank = group["user_city"].value_counts().index.tolist() return pd.Series({ "最后登录日期": latest["event_date"].strftime("%d-%m-%Y"), "最新登录地点": latest["user_city"], "最高登录频次地点": city_rank[0] if len(city_rank) >=1 else "-", "次高登录频次地点": city_rank[1] if len(city_rank) >=2 else "-" }) # 按用户ID分组统计并重命名列 result_df = df.groupby("user_id", as_index=False).apply(user_stat_calc) result_df.rename(columns={"user_id": "用户ID"}, inplace=True) # 打印结果 print(result_df.to_string(index=False))
输出效果(示例数据运行结果)
用户ID 最后登录日期 最新登录地点 最高登录频次地点 次高登录频次地点 23 06-09-2021 Thane Thane - 3224 04-09-2021 Madurai Madurai - 2331 02-08-2021 Ghaziabad Ghaziabad -
注:示例数据中每个用户仅1条登录记录,因此最高频次登录地和最新登录地一致,次高频次登录地无值。若用户存在多条不同城市的登录记录,会自动返回对应排名的城市。
内容的提问来源于stack exchange,提问作者user16795956
相关产品推荐
相关产品推荐

