добавление новой строки в pandas фрейме данных на основе условия - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть ситуация, когда я хочу добавить новую строку после выполнения определенного условия. Моя рамка данных выглядит следующим образом:

ID            Event          Date
1             A              2019-11-12
1             B              2019-11-13
1             C              2019-11-18
1             D              2019-11-20
2             A              2019-11-20
2             B              2019-11-20

в тот момент, когда значение ID меняется с 1 на 2, я хочу добавить строку между ними. Ячейка столбца события должна содержать «сегодня», поскольку имя события и столбец даты должны иметь сегодняшнюю дату.

Вывод должен выглядеть следующим образом:

 ID            Event          Date
 1             A              2019-11-12
 1             B              2019-11-13
 1             C              2019-11-18
 1             D              2019-11-20
 1             Today          2020-04-24
 2             A              2019-11-20
 2             B              2019-11-20

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

хорошо! могут быть и другие способы сделать это, но найденный мною такой:

  1. Сначала разделите ваши данные на два кадра данных. скажем, df1 и df2
  2. Затем добавьте новый фрейм данных в конец, используя df1.append (new_df)
  3. , затем снова присоединитесь к ним, используя. df1.append (df2)

    import pandas as pd
    d = {'id' : [1,1,2], 'event' : ['a', 'b', 'c'], 'date':[12,21,30]}
    
    **id    event   date
    0   1   a   12
    1   1   b   21
    2   2   c   30**
    
    to_append = pd.DataFrame({'id' : [1], 'event' : ['a'], 'date':[12]})
    
    **id    event   date
    0   1   a   12**
    
    
    df = pd.DataFrame(d)
    
    df1 = df.iloc[0:2, :]
    df1 = df1.append(to_append)
    df1 = df1.append(df2)
    
    **id    event   date
     0  1   a   12
     1  1   b   21
     0  1   a   12
     2  2   c   30**
    
0 голосов
/ 24 апреля 2020

Если необходимо добавить новые строки для каждой группы, если есть изменения, используйте:

df1 = (df[df['ID'].ne(df['ID'].shift(-1).ffill())]
       .assign(Event='today', 
               Date = pd.Timestamp.today().floor('d')))
print (df1)
   ID  Event       Date
3   1  today 2020-04-24

Или:

df1 = (df.drop_duplicates('ID', keep='last')
         .iloc[:-1]
         .assign(Event='today', 
                 Date = pd.Timestamp.today().floor('d')))

print (df1)

   ID  Event       Date
3   1  today 2020-04-24

И затем добавьте к оригиналу с значения индекса сортировки:

df = df.append(df1).sort_index(kind='mergesort')
print (df)

   ID  Event       Date
0   1      A 2019-11-12
1   1      B 2019-11-13
2   1      C 2019-11-18
3   1      D 2019-11-20
3   1  today 2020-04-24
4   2      A 2019-11-20
5   2      B 2019-11-20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...