为了账号安全,请及时绑定邮箱和手机立即绑定

如何在熊猫的另一列中扩展具有范围的数据表

如何在熊猫的另一列中扩展具有范围的数据表

翻过高山走不出你 2022-04-23 21:20:49
我有以下数据表import pandas as pd  dt = pd.DataFrame({'id_audience': ['Female 13-17', 'Female 18-20'],                       'gender': ['female', 'female'],                       'age_min': [13, 18],                       'age_max': [17, 20]})我想扩展这个数据框,有一个额外的列 ( age),并且age应该是 和 之间的age_min范围age_max。最终结果将如下所示: dt = pd.DataFrame({'id_audience': ['Female 13-17', 'Female 13-17', 'Female 13-17', 'Female 13-17',                                   'Female 13-17', 'Female 18-20', 'Female 18-20', 'Female 18-20', ],                   'gender': ['female', 'female', 'female', 'female', 'female', 'female', 'female', 'female'],                   'age_min': [13, 13, 13, 13, 18, 18, 18, 18],                   'age_max': [17, 17, 17, 17, 20, 20, 20, 20],                   'age': [13, 14, 15, 16, 17, 18, 19, 20]})有任何想法吗 ?
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

也使用explode像@Wen,但在最小/最大年龄列上直接访问范围


dt.assign(

  age=[np.arange(x, y+1) for x, y in zip(dt['age_min'], dt['age_max'])]

).explode('age').reset_index(drop=True)

    id_audience  gender  age_min  age_max age

0  Female 13-17  female       13       17  13

1  Female 13-17  female       13       17  14

2  Female 13-17  female       13       17  15

3  Female 13-17  female       13       17  16

4  Female 13-17  female       13       17  17

5  Female 18-20  female       18       20  18

6  Female 18-20  female       18       20  19

7  Female 18-20  female       18       20  20


查看完整回答
反对 回复 2022-04-23
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这是使用新熊猫 0.25.0 的一种方法explode


s=dt['id_audience'].str.extractall('(\d+)')


dt['age']= [list(range(y.iloc[0,0],y.iloc[1,0]+1)) for x , y in s.astype(int).groupby(level=0)]

dt=dt.explode('age').reset_index(drop=True)


查看完整回答
反对 回复 2022-04-23
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

使用Index.repeat和GroupBy.cumcount作为age列的计数器:


dt = dt.loc[dt.index.repeat(dt['age_max'] - dt['age_min'] + 1)]

dt['age'] = dt['age_min'] + dt.groupby(level=0).cumcount()

dt = dt.reset_index(drop=True)

print (dt)

    id_audience  gender  age_min  age_max  age

0  Female 13-17  female       13       17   13

1  Female 13-17  female       13       17   14

2  Female 13-17  female       13       17   15

3  Female 13-17  female       13       17   16

4  Female 13-17  female       13       17   17

5  Female 18-20  female       18       20   18

6  Female 18-20  female       18       20   19

7  Female 18-20  female       18       20   20


查看完整回答
反对 回复 2022-04-23
  • 3 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信