如果你在Python中有两个轴相同的Pandas Dataframe ,是否有一个函数可以将元素合并为元组,以保持它们的位置不变?如果有一个更好的方法可以合并这些 Dataframe ,而不复制索引或列的数量,那也可以。预期逻辑:
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]})
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"])
fzsnzjdm3#
你也许可以用这样的东西来达到你想要的。df3 = pd.DataFrame({x: zip(df1[x], df2[x]) for x in df1.columns})
df3 = pd.DataFrame({x: zip(df1[x], df2[x]) for x in df1.columns})
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)
xlpyo6sf5#
df1.compare(df2).groupby(level=0,axis=1).apply(lambda dd:dd.agg(tuple,axis=1))
5条答案
按热度按时间tjrkku2a1#
你可以在纯种Pandas身上做到这一点:
输出:
输入:
esbemjvw2#
你所寻找的操作看起来像"zip"。也就是说,将两个序列的元素一起匹配成一个元组序列。如果你查看你的 Dataframe 中的每一列,并将它们压缩在一起,你将得到一个结果,这是一个元组列表的列表-你想在你的结果 Dataframe 中。然后你可以用相同的列和索引构建一个 Dataframe 。在代码中,看起来像这样
fzsnzjdm3#
你也许可以用这样的东西来达到你想要的。
df3 = pd.DataFrame({x: zip(df1[x], df2[x]) for x in df1.columns})
2q5ifsrm4#
xlpyo6sf5#
输出: