Python Pandas 按时间排序并按用户 ID 分组

Lai*_*nts 5 python csv pandas pandas-groupby

我正在使用 pandas 加载 CSV 文件。它包含三列:一列包含日期和时间、一列包含用户 ID 和另一个“campaignID”。示例行:

date                 user_id              campaign_id
2018-01-10 0:21:09   151312395            GOOGLE
2018-01-10 0:21:19   151312395            GOOGLE
2018-01-10 0:21:32   151312395            GOOGLE 
Run Code Online (Sandbox Code Playgroud)

我想按用户 ID 对数据进行分组,然后对于每个用户 ID 按时间和活动 ID 对行进行分组,它应如下所示。

user_id              date                           ad_campaign
151312395            2018-01-10 0:21:09             GOOGLE
                     2018-01-10 0:21:19             GOOGLE
                     2018-01-10 0:21:32             GOOGLE 
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所做的: import pandas as pd import numpy as np import datetime

def dateparse(time_in_secs):
    return datetime.datetime.fromtimestamp(float(time_in_secs))
columnnames = ['date','user_id', 'ad_campaign']
columnnames, sep='\t' ,usecols=[0,1,3],index_col = 'date')
df=pd.read_csv(r'C:\Users\L\Desktop\Data.csv' , 
     sep='\t',names = columnnames, usecols=[0,1,3], 
    parse_dates=True,date_parser=dateparse)
df.date = pd.to_datetime(df.date)
df = df.sort_values(by = 'date')
g = df.groupby('user_id')['ad_campaign']
print(g)
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

<pandas.core.groupby.SeriesGroupBy object at 0x04EF26F0>
[Finished in 0.6s]
Run Code Online (Sandbox Code Playgroud)

为什么打印不提供排序列?

YOL*_*OLO 4

首先,如果您正在这样做groupby,则不需要显式对列进行排序。

你可以做:

方法一:

df.date = pd.to_datetime(df.date)
g = df.groupby(['user_id','date'])['ad_campaign']
print(g.first())
Run Code Online (Sandbox Code Playgroud)

方法二:

df.set_index(['user_id','date']).sort_index()
Run Code Online (Sandbox Code Playgroud)