你能把Pandas Dataframe 的元素合并成元组吗?

yftpprvb  于 2023-02-27  发布在  其他
关注(0)|答案(5)|浏览(197)

如果你在Python中有两个轴相同的Pandas Dataframe ,是否有一个函数可以将元素合并为元组,以保持它们的位置不变?如果有一个更好的方法可以合并这些 Dataframe ,而不复制索引或列的数量,那也可以。
预期逻辑:

tjrkku2a

tjrkku2a1#

你可以在纯种Pandas身上做到这一点:

(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]})
esbemjvw

esbemjvw2#

你所寻找的操作看起来像"zip"。也就是说,将两个序列的元素一起匹配成一个元组序列。如果你查看你的 Dataframe 中的每一列,并将它们压缩在一起,你将得到一个结果,这是一个元组列表的列表-你想在你的结果 Dataframe 中。然后你可以用相同的列和索引构建一个 Dataframe 。在代码中,看起来像这样

data = [list(zip(df1[col], df2[col])) for col in df1]
pd.DataFrame(data, index=[1,2,3], columns=["A", "B", "C"])
fzsnzjdm

fzsnzjdm3#

你也许可以用这样的东西来达到你想要的。
df3 = pd.DataFrame({x: zip(df1[x], df2[x]) for x in df1.columns})

2q5ifsrm

2q5ifsrm4#

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 # using + operator , satisfies answer technically
    return df

df = add_dfs(df1, df2)
xlpyo6sf

xlpyo6sf5#

df1.compare(df2).groupby(level=0,axis=1).apply(lambda dd:dd.agg(tuple,axis=1))

输出:

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

相关问题