Многократная Операция в кадре данных Панд одновременно - PullRequest
0 голосов
/ 31 августа 2018

У меня есть основной кадр данных D1:

PRCESS_NO   VALUE   COUNT   TIME
18          25855   69      13:41:56
19          10254   8       13:42:14
20          10254   4       13:42:20
21          68522   18      13:42:29
22          68522   75      13:42:33
23          25855   21      13:42:37
24          10254   658     13:42:53
25          10254   84      13:42:59

кадр данных D2:

PRCESS_NO   VALUE   COUNT   TIME
21          68522   12      14:32:25
22          68522   10      14:42:39
23          25855   54      14:38:25

Я хочу обновить первичный фрейм данных D1 со значениями из фрейма данных D2 согласно указанному ниже условию:

  1. Добавить столбцы значений VALUE & COUNT (D1.VALUE + D2.VALUE, D1.COUNT + D2.COUNT)
  2. Обновить столбец ВРЕМЕНИ D1 значениями из столбца ВРЕМЯ D2.

Финальный кадр данных D1:

PRCESS_NO   VALUE   COUNT   TIME
18          25855   69      13:41:56
19          10254   8       13:42:14
20          10254   4       13:42:20
21          68522   30      14:32:25
22          68522   85      14:42:39
23          25855   75      14:38:25
24          10254   658     13:42:53
25          10254   84      13:42:59

1 Ответ

0 голосов
/ 31 августа 2018

Использование DataFrame.add с combine_first:

cols = ['VALUE','COUNT']
D1 = D1.set_index('PRCESS_NO')
D2 = D2.set_index('PRCESS_NO')

D1[cols] = D1[cols].add(D2[cols], fill_value=0).astype(int)
D1['TIME'] = D2['TIME'].combine_first(D1['TIME'])
D1 = D1.reset_index()
print (D1)
   PRCESS_NO   VALUE  COUNT      TIME
0         18   25855     69  13:41:56
1         19   10254      8  13:42:14
2         20   10254      4  13:42:20
3         21  137044     30  14:32:25
4         22  137044     85  14:42:39
5         23   51710     75  14:38:25
6         24   10254    658  13:42:53
7         25   10254     84  13:42:59

или concat с совокупностью agg sum и last:

D1 = (pd.concat([D1,D2])
        .groupby('PRCESS_NO', as_index=False)
        .agg({'VALUE':'sum', 'COUNT':'sum', 'TIME':'last'}))
print (D1)
   PRCESS_NO   VALUE  COUNT      TIME
0         18   25855     69  13:41:56
1         19   10254      8  13:42:14
2         20   10254      4  13:42:20
3         21  137044     30  14:32:25
4         22  137044     85  14:42:39
5         23   51710     75  14:38:25
6         24   10254    658  13:42:53
7         25   10254     84  13:42:59
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...