以高效的方式组合两个数据帧而不进行复制和恢复| python

以高效的方式组合两个数据帧而不进行复制和恢复| python,python,pandas,dataframe,combinations,Python,Pandas,Dataframe,Combinations,我有两个包含数千行的数据帧,我需要将这两个数据帧合并到一个数据帧中,而无需复制和还原。例如: 数据帧1 drug1 drug2 drug3 数据帧2 disease1 disease2 disease3 因此,输出数据帧将是: 输出数据帧 drug1 disease1 drug1 disease2 drug1 disease3 drug2 disease1 drug2 disease2 drug2 disease3 drug3 disease1 drug3 disease2 drug3 d

我有两个包含数千行的数据帧,我需要将这两个数据帧合并到一个数据帧中,而无需复制和还原。例如:

数据帧1

drug1
drug2
drug3
数据帧2

disease1
disease2
disease3
因此,输出数据帧将是:

输出数据帧

drug1 disease1
drug1 disease2
drug1 disease3
drug2 disease1
drug2 disease2
drug2 disease3 
drug3 disease1
drug3 disease2
drug3 disease3
我不希望输出组合包含以下内容:

disease1 drug1
drug1 drug1
disease1 disease1 
实际上,我使用了
pd.merge
进行了尝试,但它返回了重复和反转,而且花费了很长时间,因为我在数据帧1和2中有数千个


有什么帮助吗?

pandas
中,一种纯粹的方法是创建一个,然后将其转换为数据帧:

>>> df1
       0
0  drug1
1  drug2
2  drug3
>>> df2
          0
0  disease1
1  disease2
2  disease3

df3 = (pd.MultiIndex.from_product([df1[0],df2[0]])
       .to_frame()
       .reset_index(drop=True))

>>> df3
       0         1
0  drug1  disease1
1  drug1  disease2
2  drug1  disease3
3  drug2  disease1
4  drug2  disease2
5  drug2  disease3
6  drug3  disease1
7  drug3  disease2
8  drug3  disease3

pandas
中,一种纯粹的方法是创建一个数据帧,然后将其转换为一个数据帧:

>>> df1
       0
0  drug1
1  drug2
2  drug3
>>> df2
          0
0  disease1
1  disease2
2  disease3

df3 = (pd.MultiIndex.from_product([df1[0],df2[0]])
       .to_frame()
       .reset_index(drop=True))

>>> df3
       0         1
0  drug1  disease1
1  drug1  disease2
2  drug1  disease3
3  drug2  disease1
4  drug2  disease2
5  drug2  disease3
6  drug3  disease1
7  drug3  disease2
8  drug3  disease3
安装程序
合并指定列上的

理解力
pandas.concat
任意两个数据帧的叉积的推广

i = df1.index.repeat(len(df2))
j = np.tile(df2.index, len(df1))

pd.concat([
    df1.loc[i].reset_index(drop=True),
    df2.loc[j].reset_index(drop=True)
], sort=True, axis=1)
安装程序
合并指定列上的

理解力
pandas.concat
任意两个数据帧的叉积的推广

i = df1.index.repeat(len(df2))
j = np.tile(df2.index, len(df1))

pd.concat([
    df1.loc[i].reset_index(drop=True),
    df2.loc[j].reset_index(drop=True)
], sort=True, axis=1)
尝试以下解决方案:

from pandas import DataFrame, merge

df1['key'] = 1
df2['key'] = 1

result = df1.merge(df2, on='key').drop('key', axis=1)
尝试以下解决方案:

from pandas import DataFrame, merge

df1['key'] = 1
df2['key'] = 1

result = df1.merge(df2, on='key').drop('key', axis=1)


这是最新的,我确信在
itertools
中可以找到。不,没关系。我想要Druge2 disease2和Drug3Disease3@ScottBoston我想@ScottBoston的意思是你的“不想要的”输出中有
Druge1 disease1
。哦,对不起,我弄混了,我的意思是,如果我有一个组合,我不想要与之相反的@ScottBoston可能的副本,我确信在
itertools
中可以找到。不,没关系,我想要药物2和药物3。我想@ScottBoston的意思是,你的“不想要的”中有
drug1output.ooh抱歉,我混合了,我的意思是如果我有一个组合,我不想要相反的@ScottBostonpooble重复,这是我以前尝试过的,返回重复和恢复:(但不应该。数据帧中是否有重复项?不,我没有,但这也花了很长时间@Lev Zakharov这是我以前尝试过的,并返回重复和恢复:(但不应该。数据帧中有重复项吗?不,我没有,但这也花了很长时间@Lev ZakharovIn设置,我的药物和疾病没有那样编号,它们是任何名称。你说它们没有那样编号是什么意思?看起来和你的输入一样。这只是一个例子,所以实际上药物和疾病就像CID00757一样。)DOID_3762@piRSquaredOk。这个解决方案应该推广到任何你的值。我使用了你给出的例子。我应该使用什么例子?我的意思是你的解决方案似乎是硬编码的,我如何将它应用于任何药物和疾病的名称?在设置中,我的药物和疾病不是那样编号的,它们是任何名称。你的意思是它们是什么ren不是那样编号的吗?它似乎与您的输入相同。这只是一个示例,所以实际上药物和疾病就像CID00757 DOID_3762@piRSquaredOk。解决方案应该推广到您的值。我使用了您给出的示例。我应该使用什么示例?我的意思是您的解决方案似乎是硬编码的,我如何应用它有药物和疾病的名字吗?