亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在熊貓的另一列中擴展具有范圍的數據表

如何在熊貓的另一列中擴展具有范圍的數據表

翻過高山走不出你 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 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號