啊啊啊啊啊吖

2019-02-26   阅读量: 1901

数据分析师 Python数据分析

计算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)

有人可以帮帮我吗?:)

24.8917 1 3 关注作者 收藏

评论(1)

啊啊啊啊啊吖
2019-02-26

找到解决办法了:使用列表推导与展平和过滤,然后计数:

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

0.0000 0 0 回复

推荐课程