分组数据框以获取最新消息与时间戳排序

时间:2018-07-17 14:33:09

标签: python pandas pandas-groupby

我上面的数据框为:

    customer_id   message                timestamp        Month
0   9683          txn of INR 234.00      1525266558487      May
1   9683          txn of INR 975.00      1525192344719      May
2   7596          txn of INR 1,363.80    1524905898745    April
3   10661         txn of INR 200.00      1525262750075      May
4   10661         txn of INR 300.00      1524894609266    April

我想通过 customer_id message groupby数据框并按 timestamp 排序,以便从中获取最新消息每个月(如id:9683中的月份)以及不同月份的不同消息,以便我们获得最新消息。

输出看起来像这样

customer_id    message                                  month
9683           txn of INR 234.00, txn of INR 975.00       May
7596           txn of INR 1,363.80                      April
10661          txn of INR 200.00                          May
10661          txn of INR 300.00                        April

我的代码如下:

f = lambda x: x.sort('timestamp', ascending=False)
agg_funcs = {'message':lambda x:','.join(map(str, x))}

df1 = df.groupby(['customer_id','Month']).agg(agg_funcs).apply(f)

但是我没有得到想要的结果。

2 个答案:

答案 0 :(得分:0)

此行将按customer_idMonth分组,并串联message字段:

df = df.groupby(['customer_id', 'Month'])['message'].apply(lambda x: ', '.join(x))

如果要在分组依据之后保持排序,则将需要在最终数据框中使用一列进行排序,例如,年份列。

答案 1 :(得分:0)

怎么样呢?

df = df.sort_values('timestamp', ascending = False)
df = df.drop_duplicates(subset = ['customer_id', 'month'], keep = 'first')
df = df.sort_values('customer_id').reset_index()

这给出了:

   customer_id message      timestamp  month
2         7596    msg3  1524905898745  April
0         9683    msg1  1525266558487    May
3        10661    msg4  1525262750075    May
4        10661    msg5  1524894609266  April