首页 > 解决方案 > 按权重展开调查

问题描述

我正在尝试通过按年份和 id 的权重来扩展调查,以便进行一些回归。我愿意以下数据框

df 
id    year   weight    X       Y
 1    2011        2   54  Medium
 1    2012        1   57  Medium
 2    2011        1    8   Micro
 2    2012        2   10   Micro
 3    2011        3   10   Micro
 1    2012        1    9   Micro

将它转换成这样的东西(这个例子只是为了说明我的问题,我的真实数据集有很多 ids 和 features)

id    year   weight    X       Y
 1    2011        2   54  Medium
 1    2011        2   54  Medium
 1    2012        1   57  Medium
 2    2011        1    8   Micro
 2    2012        2   10   Micro
 2    2012        2   10   Micro
 3    2011        3   10   Micro
 3    2011        3   10   Micro
 3    2011        3   10   Micro
 1    2012        1    9   Micro

标签: pythonpython-3.xpandasnumpy

解决方案


一种方法是使用pd.Series.repeat

res = df.set_index(['id', 'year', 'X', 'Y'])['weight']\
        .repeat(df['weight'])\
        .reset_index()

print(res)

   id  year   X       Y  weight
0   1  2011  54  Medium       2
1   1  2011  54  Medium       2
2   1  2012  57  Medium       1
3   2  2011   8   Micro       1
4   2  2012  10   Micro       2
5   2  2012  10   Micro       2
6   3  2011  10   Micro       3
7   3  2011  10   Micro       3
8   3  2011  10   Micro       3
9   1  2012   9   Micro       1

推荐阅读