使用python 3,尝试对“名称”列中的每个uniqe行从“数字”列中获取最后5条记录。究竟如何在python中完成? 我的df看起来像这样:
Name Number
a 5
a 6
b 7
b 8
a 9
a 10
b 11
b 12
a 9
b 8
我在SQL中看到了相同的示例(例如Get sum of last 5 rows for each unique id),但这很耗时,我想学习如何在python中进行操作。
我的预期输出df是这样的:
Name 1 2 3 4 5
a 5 6 9 10 9
b 7 8 11 12 8
答案 0 :(得分:2)
在pivot
之后,您似乎需要groupby.cumcount()
df1=df.groupby('Name').tail(5)
final=(df1.assign(k=df1.groupby('Name').cumcount()+1)
.pivot(index='Name', columns='k', values='Number')
.reset_index().rename_axis(None, axis=1))
print(final)
Name 1 2 3 4 5
0 a 5 6 9 10 9
1 b 7 8 11 12 8
答案 1 :(得分:2)
我认为您需要这样的东西:
df_out = df.groupby('Name').tail(5)
df_out.set_index(['Name', df_out.groupby('Name').cumcount() +1])['Number'].unstack()
输出:
1 2 3 4 5
Name
a 5 6 9 10 9
b 7 8 11 12 8