首页 > 解决方案 > 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) 

有人可以帮我吗?:)

标签: pythonpandaspandas-groupbysklearn-pandas

解决方案


使用带有展平和过滤的列表推导,然后计数:

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())})

推荐阅读