Последовательно добавляйте новые строки в фрейм данных df_A, основываясь на различиях между df_A и df_B - PullRequest
0 голосов
/ 19 октября 2019

У меня есть фреймы данных для дампов каждые 10 минут в день. Пример

2019-08-28 06:00:13 SCHOOL_20190828...
2019-08-28 06:10:15 SCHOOL_20190828...
2019-08-28 06:20:14 SCHOOL_20190828...
2019-08-28 06:30:13 SCHOOL_20190828...
2019-08-28 06:40:15 SCHOOL_20190828...
... ...
2019-09-28 05:10:13 SCHOOL_20190928...
2019-09-28 05:20:13 SCHOOL_20190928...
2019-09-28 05:30:13 SCHOOL_20190928...
2019-09-28 05:40:14 SCHOOL_20190928...
2019-09-28 05:50:13 SCHOOL_20190928...

Каждый последующий фрейм данных имеет разницу примерно в 2 строки (если они происходят из одного и того же дня)

Я хочу прочитать первый фрейм данных за день (A),сравните его со следующим фреймом данных (B) и добавьте новые строки в мой фрейм данных A. Я хочу продолжить, пока не прочитаю все фреймы данных за этот день. Перейдите к следующему дню и сделайте то же самое. Затем я добавлю все выводы из разных дней.

Примеры фреймов данных

import pandas as pd
import dask.dataframe as dd

df_A = pd.DataFrame([{'a': 1, 'b': 2, 'c':3}, {'a':10, 'b': 20, 'c': 30},{'a':2,'b':4,'c':6}]) 
df_B = pd.DataFrame([{'a': 1, 'b': 2, 'c':3}, {'a':10, 'b': 20, 'c': 30},{'a':2,'b':4,'c':6},{'a':0,'b':12,'c':16}])
df_C = pd.DataFrame([{'a': 1, 'b': 2, 'c':3},{'a':21,'b':12,'c':9}])
df_A                                                                                                                                                                      
Out[3]: 
    a   b   c
0   1   2   3
1  10  20  30
2   2   4   6

df_B                                                                                                                                                                      
Out[8]: 
    a   b   c
0   1   2   3
1  10  20  30
2   2   4   6
3   0  12  16

df_C                                                                                                                                                                      
Out[9]: 
    a   b  c
0   1   2  3
1  21  12  9

Я хочу, чтобы мой окончательный фрейм данных был

df                                                                                                                                                                       
Out[10]: 
    a   b   c
0   1   2   3
1  10  20  30
2   2   4   6
3   0  12  16
4  21  12   9

Я хочу самый эффективный способ сделать этопоскольку фреймов данных довольно много (около 5000)

В настоящее время я просто читаю все дампы, используя dask и удаляя дубликаты.

ddf = dd.read_csv(path, storage_options=storage_opts, assume_missing=True).drop_duplicates().compute()

1 Ответ

0 голосов
/ 19 октября 2019

вы можете использовать pd.concat и drop_duplicates, чтобы сделать это, как показано ниже

df1 = pd.DataFrame([['0', '1', '2', '3'], ['1', '10', '20', '30'], ['2', '2', '4', '6']], columns=('id', 'a', 'b', 'c'))
df2 = pd.DataFrame([['0', '1', '2', '3'], ['1', '10', '20', '30'], ['2', '2', '4', '6'], ['3', '0', '12', '16']], columns=('id', 'a', 'b', 'c'))
df3 = pd.DataFrame([['0', '1', '2', '3'], ['1', '21', '12', '9']], columns=('id', 'a', 'b', 'c'))

df = pd.concat([df1,df2,df3]).drop_duplicates().reset_index(drop=True)
print(df)

Результат

 id   a   b   c
0  0   1   2   3
1  1  10  20  30
2  2   2   4   6
3  3   0  12  16
1  1  21  12   9
...