номер приращения в этом списке понимания - PullRequest
0 голосов
/ 26 сентября 2018

Рассмотрим следующий 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]

, что здорово, но мне нужно увеличивать номер недели для каждого дублирования, чтобы у Джона Си было 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 

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Может передавать строку , которая является 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
0 голосов
/ 26 сентября 2018

Если я правильно понимаю, вы можете просто создать вспомогательный фрейм данных из строк, которые вы хотите дублировать, затем увеличить число 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...