1. ホーム
  2. python

[解決済み] pandasで2つのデータフレームの行を連結する

2023-04-25 21:42:02

質問

2つのデータフレームを連結する必要があります。 df_adf_b は同じ数の行を持つ ( nRow ) を持つ行を,キーを考慮することなく次々に生成する。この関数は cbindR programming language . 各データフレームのカラム数は異なる場合があります。

結果のデータフレームは同じ数の行を持つことになります nRow となり、列の数は両方のデータフレームの列数の合計と同じになります。言い換えれば、これは2つのデータフレームのブラインドカラムナー連結です。

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)

どのように解決するのですか?

コール concat を呼び出し、パラメータ axis=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  

の様々なメソッドに関する便利なガイドがあります。 をマージ、結合、連結する様々な方法についての有用なガイドがあります。 をオンラインで確認できます。

例えば、衝突するカラムがない場合、次のようにすることができます。 merge とし、同じ行数なのでインデックスを使用します。

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  

また、上記と同じ理由で、単純な join も動作します。

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