如何在熊猫中选择每个唯一记录的最后5行

时间:2019-06-27 12:34:24

标签: python-3.x pandas dataframe

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

2 个答案:

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