python - Pandas - 计算 df 中的行数以发现每天的存活率
问题描述
.
大家好!
我有一个dfA
(表 A),其中包含某些产品可用的天数(days_survived
)。我需要计算每天总共可用的产品数量(表 B)。我的意思是,我需要计算行数dfA
以发现前 5 天每天的存活率 ( df2
)。
表 A:
+-------+--------------+
| id | days_survived|
+-------+--------------+
| 1 | 1 |
| 2 | 3 |
| 3 | 10 |
| 4 | 40 |
| 5 | 4 |
| 6 | 9 |
+-------+--------------+
表 B(分析前 5 天的预期结果):
+-------+----------------+
| day | #count_survived|
+-------+----------------+
| 1 | 6 |
| 2 | 5 |
| 3 | 5 |
| 4 | 4 |
| 5 | 3 |
+-------+----------------+
这个结果意味着第一天总共有 6 个产品可用,然后第二天和第三天只有 5 个,然后第四天只有 4 个,最后第五天只有 3 个。
代码:
# create df
import pandas as pd
d = {'id': [1,2,3,4,5,6], 'days_survived': [1,3,10,40,4,9]}
dfA = pd.DataFrame(data=d)
有人可以帮我吗?:)
解决方案
使用带有展平和过滤的列表推导,然后计数:
comp = [y for x in dfA['days_survived'] for y in range(1, x + 1) if y < 6]
s = pd.Series(comp).value_counts().rename_axis('day').reset_index(name='#count_survived')
print (s)
day #count_survived
0 1 6
1 3 5
2 2 5
3 4 4
4 5 3
另一个解决方案Counter
:
from collections import Counter
comp = [y for x in dfA['days_survived'] for y in range(1, x + 1) if y < 6]
d = Counter(comp)
df = pd.DataFrame({'day':list(d.keys()), '#count_survived':list(d.values())})
推荐阅读
- javascript - 升级到 NextJS 9.0 后如何修复 React Hooks?
- django - 如何在 django 的用户模块的个人资料页面中编辑特定用户的详细信息
- javascript - 在嵌套对象函数中键入 this
- excel - Excel Power Query/M - 根据网站上可用的页数动态组合连接数
- salesforce - 模拟 Web 服务调用实现
- html - 带有背景的标题内的中心元素
- javascript - 如何用js改变reCaptcha(v2)的宽度?
- python - BeautifulSoup 没有找到所有的跨度
- java - 当列表类型不同时,Java 列表数组工作
- ruby-on-rails - 如何修复查找文件 /sw/js 的 GET 请求的 RoutingError