当前位置: 首页 > 知识库问答 >
问题:

在熊猫中连接两个数据帧的行

邢心水
2023-03-14

我需要将两个数据帧df_adf_b一个接一个地连接起来,它们具有相同的行数(nRow),而不考虑任何键。此函数类似于R编程语言中的cbind。每个数据帧中的列数可能不同。

结果数据帧将具有相同的行数nRow,列数等于两个数据帧中的列数之和。换句话说,这是两个数据帧的盲列连接。

import pandas as pd
dict_data = {'Treatment': ['C', 'C', 'C'], 'Biorep': ['A', 'A', 'A'], 'Techrep': [1, 1, 1], 'AAseq': ['ELVISLIVES', 'ELVISLIVES', 'ELVISLIVES'], 'mz':[500.0, 500.5, 501.0]}
df_a = pd.DataFrame(dict_data)
dict_data = {'Treatment1': ['C', 'C', 'C'], 'Biorep1': ['A', 'A', 'A'], 'Techrep1': [1, 1, 1], 'AAseq1': ['ELVISLIVES', 'ELVISLIVES', 'ELVISLIVES'], 'inte1':[1100.0, 1050.0, 1010.0]}
df_b = pd.DataFrame(dict_data)

共有2个答案

益富
2023-03-14

多亏了@EdChum,我也遇到了同样的问题,尤其是当索引不匹配时。不幸的是,在pandas guide中,这种情况没有出现(例如,当您删除一些行时)

import pandas as pd
t=pd.DataFrame()
t['a']=[1,2,3,4]
t=t.loc[t['a']>1] #now index starts from 1

u=pd.DataFrame()
u['b']=[1,2,3] #index starts from 0

#option 1
#keep index of t
u.index = t.index 

#option 2
#index of t starts from 0
t.reset_index(drop=True, inplace=True)

#now concat will keep number of rows 
r=pd.concat([t,u], axis=1)
司空镜
2023-03-14

调用concat并传递paramaxis=1以按列连接:

In [5]:

pd.concat([df_a,df_b], axis=1)
Out[5]:
        AAseq Biorep  Techrep Treatment     mz      AAseq1 Biorep1  Techrep1  \
0  ELVISLIVES      A        1         C  500.0  ELVISLIVES       A         1   
1  ELVISLIVES      A        1         C  500.5  ELVISLIVES       A         1   
2  ELVISLIVES      A        1         C  501.0  ELVISLIVES       A         1   

  Treatment1  inte1  
0          C   1100  
1          C   1050  
2          C   1010  

对于在线合并、连接和连接的各种方法,有一个有用的指南。

例如,由于没有冲突列,因此可以合并并使用索引,因为它们具有相同的行数:

In [6]:

df_a.merge(df_b, left_index=True, right_index=True)
Out[6]:
        AAseq Biorep  Techrep Treatment     mz      AAseq1 Biorep1  Techrep1  \
0  ELVISLIVES      A        1         C  500.0  ELVISLIVES       A         1   
1  ELVISLIVES      A        1         C  500.5  ELVISLIVES       A         1   
2  ELVISLIVES      A        1         C  501.0  ELVISLIVES       A         1   

  Treatment1  inte1  
0          C   1100  
1          C   1050  
2          C   1010  

出于与上述相同的原因,一个简单的连接也可以工作:

In [7]:

df_a.join(df_b)
Out[7]:
        AAseq Biorep  Techrep Treatment     mz      AAseq1 Biorep1  Techrep1  \
0  ELVISLIVES      A        1         C  500.0  ELVISLIVES       A         1   
1  ELVISLIVES      A        1         C  500.5  ELVISLIVES       A         1   
2  ELVISLIVES      A        1         C  501.0  ELVISLIVES       A         1   

  Treatment1  inte1  
0          C   1100  
1          C   1050  
2          C   1010  

 类似资料:
  • 我有一个csv文件列表,我使用 我目前正在尝试遍历csv列表,并使用方法将axis参数设置为1,以按列将所有数据帧添加到一起。 它是工作的希望,但我遇到的问题,因为所有的数据帧都有相同的冒号名称,当我连接他们我得到例如10列都与关键"日期" 不管怎样,我能给哥伦布起个独一无二的名字吗?比如伦敦约会,柏林约会?显然,这些名称基于数据帧的名称。

  • 我得到以下错误 关于代码 我试图将的列连接到的列。 对于这些打印语句 我得到以下输出: 你知道是什么问题吗?为什么索引会成为一个问题?索引应该是相同的,因为我关注的是列,而不是行。列值似乎完全不同。 谢谢

  • 你能帮我连接两个数据帧吗。 我有两个数据帧。 DF1: DF2: 我需要基于前两个数据帧创建一个数据帧,左连接两列。列index和val2在两个数据帧中具有相同的名称。df3的结果应该如下所示: 应该删除df1中不存在的df2中的索引,如果df1中的索引具有与df2中相同的val2,则应该将1添加到新的列val3中,否则:NaN。 非常感谢提前!

  • 问题内容: 我找不到关于交叉联接的任何信息,包括合并/联接或其他一些东西。我需要使用{my function}作为myfunc处理两个数据帧。相当于: 相当于: 但我需要更有效的解决方案:如果使用了应用,我将如何实现它们; ^^ 问题答案: 对于叉积,请参阅此问题。 本质上,您必须进行常规合并,但为每一行赋予相同的键以进行连接,以使每一行在框架之间相互连接。 然后可以通过应用函数将列添加到新框架:

  • 我正在尝试连接到数据帧。它们看起来像这样 期望的最终目标是: 我一直试图使用pd.merge和。连接函数与on='外'设置不成功

  • 假设我有两个数据帧,具有不同级别的信息,如下所示: 我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。 预期产出: