此列表理解中的增量编号

考虑以下 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

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

我正在使用以下代码复制行


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        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 


慕尼黑5688855
浏览 138回答 2
2回答

饮歌长啸

如果我理解正确,您可以创建要复制的行的辅助数据帧,然后增加该Week辅助数据帧上的数字,然后连接到原始数据:helper = pd.concat([df.loc[df.Course == 'Prison']]*2)helper['Week'] += helper.reset_index().index+1df = pd.concat((df,helper)).sort_values('ID')>>> 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.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

大话西游666

可以传递一行,这是一个pd.Series与您的df. 例如,取>>> row = df.loc[df.Course.eq('Prison'), :].iloc[0,:].copy()ID             3Name      John CWeek        1922Course    PrisonHours        3.5Name: 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      Hours0   1.0 John A  1922.0  Bike Tech   5.51   2.0 John B  1922.0  Auto Tech   3.22   3.0 John C  1922.0  Prison      3.53   3.0 John C  1923.0  Prison      3.54   3.0 John C  1924.0  Prison      3.55   3.0 John C  1925.0  Prison      3.56   4.0 John D  1922.0  Comp        6.57   5.0 John E  1922.0  Awareness   7.08   6.0 John F  1922.0  First Aid   7.29   7.0 John G  1922.0  BasketBall  2.510  8.0 John H  1922.0  Tech        5.4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python