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

5

我将使用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 

我希望按照用户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 

这是我目前的代码: 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)

这将得到以下输出:
<pandas.core.groupby.SeriesGroupBy object at 0x04EF26F0>
[Finished in 0.6s]

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

2个回答

4
首先,如果你正在使用groupby,那么不需要显式地对列进行排序。
你可以这样做:
方法一:
df.date = pd.to_datetime(df.date)
g = df.groupby(['user_id','date'])['ad_campaign']
print(g.first())

方法二:

df.set_index(['user_id','date']).sort_index()

我不知道我是否可以在这里问一个后续问题,但即使它有效,我仍然卡在下一步上了。 - Laila Van Ments
@LailaVanMents 我也不知道,但如果这是同一个问题,你可以问一下。那是什么? - YOLO
创建了一个新问题:https://stackoverflow.com/questions/50099105/dynamic-location-count-in-pandas-array - Laila Van Ments

1
您可以尝试使用df.set_index(['user_id', 'date'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接