我如何计算熊猫的人口?

Posted

技术标签:

【中文标题】我如何计算熊猫的人口?【英文标题】:How can i calculate population in pandas? 【发布时间】:2019-12-13 14:52:51 【问题描述】:

我有一个这样的数据集:-

S.No.,Year of birth,year of death
1,  1,  5
2,  3,  6
3,  2,  -
4,  5,  7

我需要计算直到那几年的人口:-

year,population
1   1
2   2
3   3
4   3
5   4
6   3
7   2
8   1

如何在熊猫中解决它? 因为我不擅长熊猫。 任何帮助将不胜感激。

【问题讨论】:

1.使用pd.to_datetime 将年份转换为 data_time 索引。 2.然后排序你想要的年份。 3.使用df[columns].sum() 【参考方案1】:

首先必须选择year of death的最大年份,如果不存在,则在解决方案中使用8

然后将year of death 的值转换为数字,并在今年之前替换缺失值。在第一个解决方案中使用birthdeath 列与Index.repeatGroupBy.cumcount 之间的差异,用于计数Series.value_counts

#if need working with years
#today_year = pd.to_datetime('now').year

today_year = 8
df['year of death'] = pd.to_numeric(df['year of death'], errors='coerce').fillna(today_year)


df = df.loc[df.index.repeat(df['year of death'].add(1).sub(df['Year of birth']).astype(int))]
df['Year of birth'] += df.groupby(level=0).cumcount() 

df1 = (df['Year of birth'].value_counts()
                          .sort_index()
                          .rename_axis('year')
                          .reset_index(name='population'))
print (df1)
   year  population
0     1           1
1     2           2
2     3           3
3     4           3
4     5           4
5     6           3
6     7           2
7     8           1

另一种解决方案使用range 重复年份的列表理解:

#if need working with years
#today_year = pd.to_datetime('now').year

today_year = 8
s = pd.to_numeric(df['year of death'], errors='coerce').fillna(today_year)


L = [x for s, e in zip(df['Year of birth'], s) for x in range(s, e + 1)]

df1 = (pd.Series(L).value_counts()
                   .sort_index()
                   .rename_axis('year')
                   .reset_index(name='population'))
print (df1)
   year  population
0     1           1
1     2           2
2     3           3
3     4           3
4     5           4
5     6           3
6     7           2
7     8           1

和以前类似,只使用Counter作为字典,用于最终DataFrame

from collections import Counter

#if need working with years
#today_year = pd.to_datetime('now').year

today_year = 8
s = pd.to_numeric(df['year of death'], errors='coerce').fillna(today_year)

d = Counter([x for s, e in zip(df['Year of birth'], s) for x in range(s, e + 1)])
print (d)
Counter(5: 4, 3: 3, 4: 3, 6: 3, 2: 2, 7: 2, 1: 1, 8: 1)

df1 = pd.DataFrame('year':list(d.keys()),
                    'population':list(d.values()))
print (df1)
   year  population
0     1           1
1     2           2
2     3           3
3     4           3
4     5           4
5     6           3
6     7           2
7     8           1

【讨论】:

以上是关于我如何计算熊猫的人口?的主要内容,如果未能解决你的问题,请参考以下文章

案例:亚洲国家人口数据计算

平均年龄计算公式是啥?

如何在sql查询访问中计算所有子县的每个县的平均人口?

如何计算 MDX 中组的总和?

一个州的人口加权中心

如何创建有限呼叫人口模型?