Панды - объединяйте серии с уникальными значениями, совпадающими по строкам

Я начну с того, что добавлю свой код, а затем объясню, чего я пытаюсь достичь:

names = [
    'ABX-B767-200BDSF (767-3A)',
    'ABX-B767-200BDSF (DAR 767-3A)',
    'ABX-B767-200BDSF (DAR 767-4)',
]

i1 = pd.read_csv(f'{path}/{files[0]}', skiprows=4, nrows=1)
i2 = pd.read_csv(f'{path}/{files[1]}', skiprows=4, nrows=1)
i3 = pd.read_csv(f'{path}/{files[2]}', skiprows=4, nrows=1)

df_list = [i1, i2, i3]

cl1 = pd.Series(df_list[0].columns.values, name=names[0])
cl2 = pd.Series(df_list[1].columns.values, name=names[1])
cl3 = pd.Series(df_list[2].columns.values, name=names[2])

col_list = [cl1, cl2, cl3]
final_frame = pd.concat([df for df in col_list], axis=1)

final_frame.fillna('', inplace=True)

Да, я знаю, что это неэффективно и долго, пожалуйста, поработайте со мной.

Мои фактические данные имеют больше, чем эти 3 серии, у меня их 11, но для простоты я показываю код только так, как если бы у меня было три.

Прямо сейчас мой вывод выглядит так:

ABX-B767-200BDSF (767-3A)   ABX-B767-200BDSF (DAR 767-3A)   ABX-B767-200BDSF (DAR 767-4)
0   Offset  Offset  Offset
1   A/C NUMBER  A/C NUMBER  10 MI RANGE SEL CAPT
2   A/C TYPE    A/C TYPE    10 MI RANGE SEL F/O
3   A/P CAUTION FCC-C   A/P CAUTION FCC-C   160 MI RANGE SEL CAPT
4   A/P CAUTION FCC-L   A/P CAUTION FCC-L   160 MI RANGE SEL F/O

Панды - объединяйте серии с уникальными значениями, совпадающими по строкам

и мне нужно, чтобы это выглядело так:

    ABX-B767-200BDSF (767-3A)   ABX-B767-200BDSF (DAR 767-3A)   ABX-B767-200BDSF (DAR 767-4)
0   OFFSET  OFFSET  OFFSET
1                   10 MI RANGE SEL CAPT
2                   10 MI RANGE SEL F/O
3                   160 MI RANGE SEL CAPT
…           
13  A/C NUMBER  A/C NUMBER  
14  A/C TYPE    A/C TYPE    

Панды - объединяйте серии с уникальными значениями, совпадающими по строкам

Где значения совпадают по строкам, а строки, которые не совпадают, заполняются пробелами. Я пытался использовать слияние с большим разбросом аргументов, и мне просто не повезло. Любые идеи, как получить желаемый результат здесь?

По запросу .head(10) моих cl1, 2, 3:

cl1.head(10).to_dict()
{0: 'Offset',
 1: 'A/C NUMBER',
 2: 'A/C TYPE',
 3: 'A/P CAUTION FCC-C',
 4: 'A/P CAUTION FCC-L',
 5: 'A/P CAUTION FCC-R',
 6: 'A/P CMD C ENGA FCC-C',
 7: 'A/P CMD C ENGA FCC-L',
 8: 'A/P CMD C ENGA FCC-R',
 9: 'A/P CMD C ENGA MCP'}

cl2.head(10).to_dict()
{0: 'Offset',
 1: 'A/C NUMBER',
 2: 'A/C TYPE',
 3: 'A/P CAUTION FCC-C',
 4: 'A/P CAUTION FCC-L',
 5: 'A/P CAUTION FCC-R',
 6: 'A/P CMD C ENGA FCC-C',
 7: 'A/P CMD C ENGA FCC-L',
 8: 'A/P CMD C ENGA FCC-R',
 9: 'A/P CMD C ENGA MCP'}

cl3.head(10).to_dict()
{0: 'Offset',
 1: '10 MI RANGE SEL CAPT',
 2: '10 MI RANGE SEL F/O',
 3: '160 MI RANGE SEL CAPT',
 4: '160 MI RANGE SEL F/O',
 5: '20 MI RANGE SEL CAPT',
 6: '20 MI RANGE SEL F/O',
 7: '40 MI RANGE SEL CAPT',
 8: '40 MI RANGE SEL F/O',
 9: '5 MI RANGE SEL CAPT'}

Предоставьте образцы данных с i1.head(10).to_dict() и то же самое для i2 и i3

not_speshal 06.05.2022 20:27

Изображение не является Минимальный воспроизводимый пример

BeRT2me 06.05.2022 20:29

Мы не можем произвести правильный вывод из неправильного вывода, нам нужен входы.

BeRT2me 06.05.2022 20:31

Спасибо за комментарии с просьбой не использовать картинки, я не знал, что stackoverflow так сложно работать с картинками. У меня нет кадра данных из желаемого результата, я просто знаю, как мой босс хочет, чтобы они выглядели. @BeRT2me BeRT2me Я не уверен, о чем ты здесь просишь.

magnuspwnzer 06.05.2022 20:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Создайте основной список, состоящий из всех значений из вашей серии.
  2. reindex каждую серию в основной список
  3. concat переиндексированная серия
srs_list = [cl1, cl2, cl3]
master = pd.concat(srs_list).drop_duplicates()
parsed_list = [srs.to_frame().set_index(srs).reindex(master) for srs in srs_list]
output = pd.concat(parsed_list,axis=1).reset_index(drop=True)

>>> output
   ABX-B767-200BDSF (767-3A) ABX-B767-200BDSF (DAR 767-3A)  \
0                     Offset                        Offset   
1                 A/C NUMBER                    A/C NUMBER   
2                   A/C TYPE                      A/C TYPE   
3          A/P CAUTION FCC-C             A/P CAUTION FCC-C   
4          A/P CAUTION FCC-L             A/P CAUTION FCC-L   
5          A/P CAUTION FCC-R             A/P CAUTION FCC-R   
6       A/P CMD C ENGA FCC-C          A/P CMD C ENGA FCC-C   
7       A/P CMD C ENGA FCC-L          A/P CMD C ENGA FCC-L   
8       A/P CMD C ENGA FCC-R          A/P CMD C ENGA FCC-R   
9         A/P CMD C ENGA MCP            A/P CMD C ENGA MCP   
10                       NaN                           NaN   
11                       NaN                           NaN   
12                       NaN                           NaN   
13                       NaN                           NaN   
14                       NaN                           NaN   
15                       NaN                           NaN   
16                       NaN                           NaN   
17                       NaN                           NaN   
18                       NaN                           NaN   

   ABX-B767-200BDSF (DAR 767-4)  
0                        Offset  
1                           NaN  
2                           NaN  
3                           NaN  
4                           NaN  
5                           NaN  
6                           NaN  
7                           NaN  
8                           NaN  
9                           NaN  
10         10 MI RANGE SEL CAPT  
11          10 MI RANGE SEL F/O  
12        160 MI RANGE SEL CAPT  
13         160 MI RANGE SEL F/O  
14         20 MI RANGE SEL CAPT  
15          20 MI RANGE SEL F/O  
16         40 MI RANGE SEL CAPT  
17          40 MI RANGE SEL F/O  
18          5 MI RANGE SEL CAPT  

Благодарю вас! Я двигался в этом направлении с основным списком, но вы определенно сэкономили мне часы экспериментов и поисков в Google!

magnuspwnzer 06.05.2022 21:36

Другие вопросы по теме