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

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

此列表理解中的增量編號

此列表理解中的增量編號

慕尼黑5688855 2021-06-16 21:09:11
考慮以下 DF。   ID   Name    Week    Course        Hours0   1   John A  1922    Bike Tech     5.51   2   John B  1922    Auto Tech     3.22   3   John C  1922    Prison        3.53   4   John D  1922    Comp          6.54   5   John E  1922    Awareness     7.05   6   John F  1922    First Aid     7.26   7   John G  1922    BasketBall    2.57   8   John H  1922    Tech          5.4我正在使用以下代碼復制行duplicate = [3 if val == 'Prison' else 1 for val in df.Course]這很好,但我需要為每個重復增加周數,這樣約翰 C 就會有 3 行,包括 1922、1923 和 1924 周。我試過了[3 if val == 'Prison' and df.Week +1 else 1 for val in df.Course]和其他一些基本鏈,但我無法弄清楚。  ID   Name    Week    Course        Hours0   1   John A  1922    Bike Tech     5.51   2   John B  1922    Auto Tech     3.22   3   John C  1922    Prison        3.52   3   John C  1923    Prison        3.52   3   John C  1924    Prison        3.53   4   John D  1922    Comp          6.54   5   John E  1922    Awareness     7.05   6   John F  1922    First Aid     7.26   7   John G  1922    BasketBall    2.57   8   John H  1922    Tech          5.4 
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

如果我理解正確,您可以創建要復制的行的輔助數據幀,然后增加該Week輔助數據幀上的數字,然后連接到原始數據:


helper = pd.concat([df.loc[df.Course == 'Prison']]*2)

helper['Week'] += helper.reset_index().index+1


df = pd.concat((df,helper)).sort_values('ID')


>>> df

   ID    Name  Week      Course  Hours

0   1  John A  1922   Bike Tech    5.5

1   2  John B  1922   Auto Tech    3.2

2   3  John C  1922      Prison    3.5

2   3  John C  1923      Prison    3.5

2   3  John C  1924      Prison    3.5

3   4  John D  1922        Comp    6.5

4   5  John E  1922   Awareness    7.0

5   6  John F  1922   First Aid    7.2

6   7  John G  1922  BasketBall    2.5

7   8  John H  1922        Tech    5.4


查看完整回答
反對 回復 2021-06-29
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

可以傳遞一行,這是一個pd.Series與您的df. 例如,取


>>> row = df.loc[df.Course.eq('Prison'), :].iloc[0,:].copy()


ID             3

Name      John C

Week        1922

Course    Prison

Hours        3.5

Name: 2, dtype: object

然后


def duplicate(n, row, df):

    week = row['Week']

    for i in range(1, n+1):

        row['Week'] = week + i

        df.loc[-i, :] = row

    return df.sort_values('ID').reset_index(drop=True)



>>> duplicate(3, row, df )


    ID  Name    Week    Course      Hours

0   1.0 John A  1922.0  Bike Tech   5.5

1   2.0 John B  1922.0  Auto Tech   3.2

2   3.0 John C  1922.0  Prison      3.5

3   3.0 John C  1923.0  Prison      3.5

4   3.0 John C  1924.0  Prison      3.5

5   3.0 John C  1925.0  Prison      3.5

6   4.0 John D  1922.0  Comp        6.5

7   5.0 John E  1922.0  Awareness   7.0

8   6.0 John F  1922.0  First Aid   7.2

9   7.0 John G  1922.0  BasketBall  2.5

10  8.0 John H  1922.0  Tech        5.4


查看完整回答
反對 回復 2021-06-29
  • 2 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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