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

此列表理解中的增量编号

此列表理解中的增量编号

慕尼黑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 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

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