Как связаться с двумя кадрами данных на оси 1, если размер строки отличается

1-й фрейм данных это (df1):

Col1  Col2
abc   5
xyz   153
yyy   24
zzz   90

Второй фрейм данных такой (df2):

col3  col
233   533 

Это результат, который я хочу (Concat df2 на df1 по оси = 1 во всех строках):

Col1    Col2    col3    col
abc     5       233     533
xyz     153     233     533
yyy     24      233     533
zzz     90      233     533

Но когда я делаю pd.concat([df1,df2],axis=1), я получаю такой результат:

Col1    Col2    col3    col
abc     5       233.0   533.0
xyz     153     NaN     NaN
yyy     24      NaN     NaN
zzz     90      NaN     NaN
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
4
0
44
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Преобразуйте свой второй DataFrame в dict и заново создайте DataFrame перед их конкатенацией:

>>> pd.concat([df1, pd.DataFrame(df2.to_dict('list'), index=df1.index)], axis=1)
  Col1  Col2  col3  col
0  abc     5   233  533
1  xyz   153   233  533
2  yyy    24   233  533
3  zzz    90   233  533

Использовать:

output = df1.join(df2).ffill()

Выход:

  Col1  Col2   col3    col
0  abc     5  233.0  533.0
1  xyz   153  233.0  533.0
2  yyy    24  233.0  533.0
3  zzz    90  233.0  533.0

Идеальный вариант использования кросса merge:

df1.merge(df2, how='cross')

Выход:

  Col1  Col2  col3  col
0  abc     5   233  533
1  xyz   153   233  533
2  yyy    24   233  533
3  zzz    90   233  533

Работает, но решение Corralien занимает 32 мс, а ваше решение - 65 мс на моем реальном df. Форма df1 — это 548x2500, а форма df2 — это 1x226 в моем реальном df.

Rahul tripp 23.04.2022 14:24

Одним из быстрых методов является expand_grid из пиянитор:

# pip install pyjanitor
import pandas as pd
import janitor as jn

others = {'df1':df1, 'df2':df2}

jn.expand_grid(others = others).droplevel(axis = 1, level = 0)

  Col1  Col2  col3  col
0  abc     5   233  533
1  xyz   153   233  533
2  yyy    24   233  533
3  zzz    90   233  533

Спасибо, этот ответ кажется на 1 мс быстрее, чем решение Корралиена на моем реальном фрейме данных. Но я бы предпочел использовать ответ corralien, так как он прост и требует на 1 библиотеку меньше.

Rahul tripp 23.04.2022 15:27

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