猿问

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

我有以下数据表


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]})

有任何想法吗 ?


翻过高山走不出你
浏览 128回答 3
3回答

摇曳的蔷薇

也使用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 age0  Female 13-17  female       13       17  131  Female 13-17  female       13       17  142  Female 13-17  female       13       17  153  Female 13-17  female       13       17  164  Female 13-17  female       13       17  175  Female 18-20  female       18       20  186  Female 18-20  female       18       20  197  Female 18-20  female       18       20  20

叮当猫咪

这是使用新熊猫 0.25.0 的一种方法explodes=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)

慕桂英4014372

使用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  age0  Female 13-17  female       13       17   131  Female 13-17  female       13       17   142  Female 13-17  female       13       17   153  Female 13-17  female       13       17   164  Female 13-17  female       13       17   175  Female 18-20  female       18       20   186  Female 18-20  female       18       20   197  Female 18-20  female       18       20   20
随时随地看视频慕课网APP

相关分类

Python
我要回答