在熊猫数据框中查找最后一个ID和增量值

时间:2018-09-06 15:39:13

标签: python pandas

我有一个数据框,其值如下:

╔════╦═════════╦══════╦═══════╗
║ id ║ quarter ║ year ║ value ║
╠════╬═════════╬══════╬═══════╣
║  1 ║       4 ║ 2017 ║     5 ║
║  1 ║       1 ║ 2018 ║     7 ║
║  2 ║       1 ║ 2018 ║     8 ║
╚════╩═════════╩══════╩═══════╝

我想找到最后一个id,并将四分之一增加到4,同时保持相同的值。预期的输出是:

╔════╦═════════╦══════╦═══════╗
║ id ║ quarter ║ year ║ value ║
╠════╬═════════╬══════╬═══════╣
║  1 ║       4 ║ 2017 ║     5 ║
║  1 ║       1 ║ 2018 ║     7 ║
║  1 ║       2 ║ 2018 ║     7 ║
║  1 ║       3 ║ 2018 ║     7 ║
║  1 ║       4 ║ 2018 ║     7 ║
║  2 ║       1 ║ 2018 ║     8 ║
║  2 ║       2 ║ 2018 ║     8 ║
║  2 ║       3 ║ 2018 ║     8 ║
║  2 ║       4 ║ 2018 ║     8 ║
╚════╩═════════╩══════╩═══════╝

我尝试在熊猫中使用df.last()来找到id的最后一个实例,并通过循环增加四分之一,但这似乎不起作用。我是python和pandas的新手,所以任何建议都很棒。

2 个答案:

答案 0 :(得分:2)

首先,您可以使用sapply来获取每个ID的最后一个值

drop_duplicate

答案 1 :(得分:1)

首先,获取每个组中的最后一行:

s = df.groupby('id').tail(1)

然后扩展到四个季度:

out = pd.concat([s]*4).sort_values('id').assign(quarter=np.tile([1,2,3,4], len(s)))

最后,合并:

df.merge(out, how='outer').sort_values('id')

   id  quarter  year  value
0   1        4  2017      5
1   1        1  2018      7
3   1        2  2018      7
4   1        3  2018      7
5   1        4  2018      7
2   2        1  2018      8
6   2        2  2018      8
7   2        3  2018      8
8   2        4  2018      8