python - 基于熊猫中年份列的累积计数
问题描述
我有一个如下所示的数据框
Unit_ID Unit_Create_Year
1 2011
2 2011
3 2012
4 2014
5 2012
6 2015
7 2017
8 2017
9 2019
从上面的数据框我想准备下面的数据框
预期输出:
Year Number_of_Unit_Since_Year List_of_Units
2011 2 [1,2]
2012 4 [1,2,3,5]
2013 4 [1,2,3,5]
2014 5 [1,2,3,5,4]
2015 6 [1,2,3,5,4,6]
2016 6 [1,2,3,5,4,6]
2017 8 [1,2,3,5,4,6,7,8]
2018 8 [1,2,3,5,4,6,7,8]
2019 9 [1,2,3,5,4,6,7,8,9]
如果一个单位是在 2011 年创建的,则应将其计算在接下来的所有年份。
步骤: 2011 年,两个单位创建了“1”和“2”。2012 年,两个单位创建了“3”和“5”。所以在 2012 年将有总共 4 个单位,包括 2011 年的单位。
解决方案
你可以试试这个:
df_new = df.groupby(['Unit_Create_Year']).agg({'Unit_ID':['count','unique']}).reset_index()
df_new.columns = ['Year','Number_of_Unit_Since_Year','List_of_Units']
df_new['Number_of_Unit_Since_Year'] = df_new['Number_of_Unit_Since_Year'].cumsum()
df_new['List_of_Units'] = df_new['List_of_Units'].apply(lambda x : x.tolist()).cumsum()
df_new
Year Number_of_Unit_Since_Year List_of_Units
0 2011 2 [1, 2]
1 2012 4 [1, 2, 3, 5]
2 2014 5 [1, 2, 3, 5, 4]
3 2015 6 [1, 2, 3, 5, 4, 6]
4 2017 9 [1, 2, 3, 5, 4, 6, 7, 8, 9]
推荐阅读
- android - 使用谷歌密钥签名的 Android 反向 apk
- android - 如何在内部存储android java中下载和保存媒体文件
- javascript - 我如何去特定用户的电子邮件收件箱或谷歌日历和所有其他谷歌应用程序
- gulp - Tailwind 和 Gulp - 连接样式表
- optimization - 二进制变量线性化中的单向条件语句
- java - RedisTemplate 模拟仅在测试类中工作
- oracle-apex - 交互式网格自动保存和刷新(处理后)
- git - 一个仓库中的不同统一项目,并希望 gitignore 忽略所有大容量文件夹
- hana - 有没有办法检查 SAP HANADB 事务日志的内容
- find - 如何在 ZSH 中有效地重命名零填充文件序列?