【发布时间】:2021-07-17 05:09:06
【问题描述】:
我有某个国家/地区的数据,这些数据在时间序列中给出了某个年龄段的人口。我试图将女性人口的数量与-1 相乘,以将其显示在金字塔图的另一侧。我已经实现了一年,即 1960 年(见下面的代码)。现在我想为 1960-2020 年的所有列实现相同的结果
PakPopulation.loc[PakPopulation['Gender']=="Female",['1960']]=PakPopulation['1960'].apply(lambda x:-x)
我也尝试了以下解决方案,但没有运气:
PakPopulation.loc[PakPopulation['Gender']=="Female",[:,['1960':'2019']]=PakPopulation[:,['1960':'2019']].apply(lambda x:-x)
架构:
| Country | Age Group | Gender | 1960 | 1961 | 1962 |
|---|---|---|---|---|---|
| XYZ | 0-4 | Male | 5880k | 5887k | 6998k |
| XYZ | 0-4 | Female | 5980k | 6887k | 7998k |
【问题讨论】:
-
使用:
PakPopulation.iloc[:, 3: 4 + 2019 -1960].apply(lambda x:-x)?或者干脆-PakPopulation.iloc[:, 3: 4 + 2019 -1960] -
但是我很惊讶你的
1960代码没有抛出错误。在 LHS 上,您只选择带有Gender = Female的行,而在 RHS 上,您拥有所有行,因此长度不匹配。 -
在 LHS 上,它选择 1960 年 Gender==Female 的所有行,在 RHS 上,它将它们与 -1 相乘
-
LHS 和 RHS 的长度不同,但是 pandas 能够以某种方式匹配索引然后分配。
标签: python pandas time-series