Можете ли вы объединить элементы фреймов данных Pandas в кортежи?

-2

Если у вас есть два фрейма данных Pandas в Python с одинаковыми осями, существует ли функция для объединения элементов в виде кортежей, чтобы они сохраняли свои позиции? Если есть лучший способ объединить эти фреймы данных без дублирования количества индексов или столбцов, это тоже сработает.

Ожидаемая логика:

Изображение того, что я пытаюсь сделать

1
  • 2
    Пожалуйста, включите воспроизводимые данные, которые можно скопировать, вместо изображений, а также укажите свои попытки решения проблемы. 22 минуты назад
1

Вы можете сделать это в чистых пандах:

(pd.concat([df1,df2])
   .stack()
   .groupby(level=[0,1])
   .apply(tuple)
   .unstack()
 )

Выход:

        A        B
0  (1, 7)  (4, 10)
1  (2, 8)  (5, 11)
2  (3, 9)  (6, 12)

Вход:

import pandas as pd 
df1 = pd.DataFrame({"A":[1,2,3],"B":[4,5,6]})
df2 = pd.DataFrame({"A":[7,8,9],"B":[10,11,12]})
0

не уверен, зачем вам это нужно, но ...

df_data = {}
for col in df1.columns:
   df_data[col] = zip(df1[col],df2[col])

new_df = pandas.DataFrame(df_data)

но вы используете много функций, которые предоставляют фреймы данных

>>> df1 = pandas.DataFrame({"A":[1,2,3],"B":[4,5,6]})
>>> df2 = pandas.DataFrame({"A":[7,8,9],"B":[10,11,12]})
>>> df_data = {}
>>> for col in df1.columns:
...    df_data[col] = zip(df1[col],df2[col])
...
>>> new_df = pandas.DataFrame(df_data)
>>> new_df
        A        B
0  (1, 7)  (4, 10)
1  (2, 8)  (5, 11)
2  (3, 9)  (6, 12)
>>>
0

Операция, которую вы ищете, похожа на «застежку-молнию». То есть сопоставить элементы двух последовательностей вместе в последовательность кортежей. Если вы посмотрите на каждый столбец в своих фреймах данных и объедините их вместе, вы получите результат, который представляет собой список списков кортежей - то, что вы хотите видеть в фрейме данных результата. Затем вы можете создать фрейм данных с теми же столбцами и индексировать эти данные. В коде это выглядит так:

data = [list(zip(df1[col], df2[col])) for col in df1]
pd.DataFrame(data, index=[1,2,3], columns=["A", "B", "C"])
Новый участник
inteoryx - новый участник этого сайта. Будьте внимательны, прося разъяснений, комментируя и отвечая. Ознакомьтесь с нашим Кодексом поведения .
0

Возможно, вы можете использовать что-то подобное для достижения того, чего хотите.

df3 = pd.DataFrame({x: zip(df1[x], df2[x]) for x in df1.columns})

0
df1 = pd.DataFrame({"A" : [1,2,3], "B":[4,5,6]})
df2 = pd.DataFrame({"A" : [7,8,9], "B":[10,11,12]})

def add_dfs(df1, df2):
    for col in df1.columns:
        df1[col] = df1[col].apply(lambda x: (x,))
    for col in df2.columns:
        df2[col] = df2[col].apply(lambda x: (x,))
    df = df1 + df2
    return df

df = add_dfs(df1, df2)
Новый участник
FoCDoT is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.