Выполнение объединения трех результирующих фреймов данных с одинаковыми столбцами, разным порядком - PullRequest
0 голосов
/ 31 декабря 2018

Я создал три различных кадра данных панд, применяя Группу По к трем различным данным, имеющим столбцы A, B, C.

Resultdf=SessionDev.query(AppDetails).filter(text(" A in ('20170727L00319')")).all()

df1= Resultdf.groupby(["A", "B","C"]).size().reset_index(name='Count')

[df1]

    A              |      B           | C  |Count

0 | 20170727L00319  |      423605030008907  |   319     |   1

1 | 20170727L00319   |     42360604002461     | 319   |   1

[df2]

   A               |     B            |  C  |  Count

0 | 20170727L00319   |   423605030008907   |  319   |   2

1 | 20170727L00319   |   423606040002461   |  319    |  2

[df3]

    A              |     B            |  C  | Count

0 | 20170727L00319   |   423605030008907   |  319  |    1

1 | 20170727L00319   |   423606040002461   |  319  |    2

Я хочу выполнить объединение (исключая дубликат) на трех вышеупомянутых сгруппированных кадрах данных в отдельные кадры данных, имеющие различный результат

Я пытался объединить эти три различных кадра данных и затем удалить дубликаты с помощью drop_duplicates, но я не могу найти какой-либо результат

A                  |    B             | C

0 | 20170727L00319  |  423605030008907  |  319

1 | 20170727L00319  |  423606040002461  |  319

2 | 20170727L00319  |  423605030008907  |  319

3 | 20170727L00319  |  42360604002461   |  319

5 | 20170727L00319  |  423606040002461  |  319

Используя

FinalUnion=pd.concat([df1,df2,df3],ignore_index=True,join_axes=[df1.drop(['Count'],axis=1)

FinalUnion.drop_duplicates(['B','C'], keep='first')

Я ожидаю результата ниже

         A             |    B             |   C

0 | 20170727L00319  |  423605030008907  |  319

1 | 20170727L00319  |  423606040002461  |  319

3 | 20170727L00319  |  42360604002461     |  319

Обновление:

После выполнения drop_duplicates в столбцах A и B у меня получился отличный результат. Но выполнение drop_duplicates для любой другой комбинации кажется неудачным.

1 Ответ

0 голосов
/ 01 января 2019

Проблема была проста, поскольку я использовал данные из трех разных таблиц в трех разных моделях, а затем в трех разных pd-фреймах данных.Затем выполните Perform Group, а затем Concat и Drop Duplicate, чтобы получить отчетливый результат.

Разрешение: Столбец [C] для первых двух таблиц, в которых есть тип данных varchar, где для третьей таблицы это был big-int,потому что drop_duplicate не смог обеспечить соответствующий результат

Изменение типа данных дало точный результат.Другой способ динамического преобразования типа данных - использование df1 [["C"]] = df1 [["C"]]. Apply (pd.to_numeric)

...