熊猫两个数据框交叉连接[重复]
Posted
技术标签:
【中文标题】熊猫两个数据框交叉连接[重复]【英文标题】:pandas two dataframe cross join [duplicate] 【发布时间】:2016-03-13 17:34:56 【问题描述】:我找不到任何关于交叉连接的信息,包括合并/连接或其他。 我需要使用 my function 作为 myfunc 处理两个数据框。 相当于:
for itemA in df1.iterrows():
for itemB in df2.iterrows():
t["A"] = myfunc(itemA[1]["A"],itemB[1]["A"])
相当于:
select myfunc(df1.A,df2.A),df1.A,df2.A from df1,df2;
但我需要更有效的解决方案: 如果使用 apply 我将如何实现它们 thx;^^
【问题讨论】:
你解决了吗?如果您有任何问题,请评论我的回答。 【参考方案1】:创建一个通用的“密钥”来交叉连接两者:
df1['key'] = 0
df2['key'] = 0
df1.merge(df2, on='key', how='outer')
【讨论】:
这种方法虽然杂乱无章,但在概念上很容易理解!谢谢 合并语句中还需要on='key' 我认为how
参数对结果没有任何影响。你可以忽略它并使用默认值(inner
)
@alejandro OP 专门请求交叉连接,这与外部连接,而不是内部连接。
@A.Kot 我明白你的意思,但严格谈论你的代码,使用how
参数不会影响,因为你加入了一个始终匹配的常量键,所以@987654325 @ 不会消除任何行【参考方案2】:
对于叉积,请参阅this question。
基本上,您必须进行正常的合并,但为每一行提供相同的连接键,以便每一行跨帧相互连接。
然后您可以通过应用您的函数向新框架中添加一列:
new_df = pd.merge(df1, df2, on=key)
new_df.new_col = new_df.apply(lambda row: myfunc(row['A_x'], row['A_y']), axis=1)
axis=1
强制 .apply
跨行工作。如果合并的框架共享一个列,如上例所示,“A_x”和“A_y”将是结果框架中的默认列名。
【讨论】:
以上是关于熊猫两个数据框交叉连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章