我上面的数据框为:
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)
但是我没有得到想要的结果。
答案 0 :(得分:0)
此行将按customer_id
和Month
分组,并串联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