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

时间:2018-04-26 14:18:34

标签: python pandas csv 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 

我想按用户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 

这是我迄今为止所做的:     将pandas导入为pd     导入numpy为np     导入日期时间

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 个答案:

答案 0 :(得分:2)

首先,如果您正在执行import numba as nb @nb.njit(fastmath=True) def get_threshold(abs_cosine,threshold): idx=0 sim_vec=np.empty((abs_cosine.shape[0]*abs_cosine.shape[1],2),dtype=np.uint32) for m in range(abs_cosine.shape[0]): for n in range(abs_cosine.shape[1]): # exclude diagonal cells if m != n and abs_cosine[m,n] >= threshold: sim_vec[idx,0]=m sim_vec[idx,1]=n idx+=1 return sim_vec[0:idx,:] ,则无需明确对列进行排序。

你可以这样做:

方法1:

groupby

方法2:

df.date = pd.to_datetime(df.date)
g = df.groupby(['user_id','date'])['ad_campaign']
print(g.first())

答案 1 :(得分:0)

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