创建时变数据帧的最有效方法

问题描述 投票:0回答:1

我有以下数据框:

from_year  to_year  id  gender
1990       1993     1   Female
1987       1992     2   Male
2000       2000     3   Male
2010       2011     4   Female

我想生成以下随时间变化的数据框:

id   year   gender
1    1990   Female
1    1991   Female
1    1992   Female
1    1993   Female
2    1987   Male
2    1988   Male
2    1989   Male
2    1990   Male
2    1991   Male
2    1992   Male
3    2000   Male
4    2010   Female
4    2011   Female

使用 python pandas 将顶部数据帧转换为底部数据帧的最有效方法是什么?

python pandas
1个回答
0
投票

这是一种方法:

res = (
    df.reindex(np.repeat(df.index, df['to_year'].sub(df['from_year']).add(1)))
    .pipe(lambda x: 
          x.assign(year=x['from_year'].add(x.groupby('id').cumcount()))
    )
    .loc[:, ['id', 'year', 'gender']]
    .reset_index(drop=True)
)

输出

    id  year  gender
0    1  1990  Female
1    1  1991  Female
2    1  1992  Female
3    1  1993  Female
4    2  1987    Male
5    2  1988    Male
6    2  1989    Male
7    2  1990    Male
8    2  1991    Male
9    2  1992    Male
10   3  2000    Male
11   4  2010  Female
12   4  2011  Female

解释

© www.soinside.com 2019 - 2024. All rights reserved.