質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.64%

複数の同じindexをもつデータフレームの結合方法について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,836

shunsuke1937

score 47

下記のように複数の同じindex で構成されたデータフレームがあります。
このデータフレームを一つのデータフレームとして出力する方法を教えてください。

import pandas as pd
frame1 = pd.DataFrame(
           {'name':['chika','you','riko','yoshiko','ruby']},
            ,columns=[name],index=[2014,2033,2211,3400,3566]
            )
print(frame1)
#frame1:
#number name
#2014   chika
#2033   you
#2211   riko
#3400   yoshiko
#3566   ruby

frame2 = pd.DataFrame(
           {'birthday':['0801','0417','0919','0713','0921']},
            ,columns=[birthday],index=[2014,2033,2211,3400,3566]
            )
print(frame2)
#frame2:
#number birthday
#2014   0801
#2033   0417
#2211   0919
#3400   0713
#3566   0921

#上記のframe1とframe2結合して下記のように結果を出したいと思っております。

#number name    birthday
#2014   chika   0801
#2033   you     0417
#2211   riko    0919
#3400   yoshiko 0713
#3566   ruby    0921

上記の例では下記のように示すと結果を得ることができました。

import pandas as pd
frame1 = pd.DataFrame({'name':['chika','you','riko','yoshiko','ruby']},index=[2014,2033,2211,3400,3566])
frame2 = pd.DataFrame({'birthday':['0801','0417','0919','0713','0921']},index=[2014,2033,2211,3400,3566])
ret = frame1.merge(frame2,left_index=True,right_index=True)
print(ret)
"""
         name birthday
2014    chika     0801
2033      you     0417
2211     riko     0919
3400  yoshiko     0713
3566     ruby     0921
"""

そこでデータフレームの中を下記のように変えたところ、
AttributeError: 'Series' object has no attribute 'merge'
エラーが返ってきました。

#frame1
#number
#2014    5.894737
#2538    7.214286
#2698    5.583333
#2785    7.000000
#2787    7.764706
#2816    5.722222
#2820    0.000000
#          ・・・
#Length: 1606, dtype: float64

#frame2
#number
#2014    5.894737
#2538    7.214286
#2698    5.583333
#2785    7.000000
#2787    7.764706
#2816    5.722222
#2820    0.000000
#          ・・・
#Length: 1606, dtype: float64
import pandas as pd 
ret =  frame1.merge(frame2,left_index=True,right_index=True)

#結果
#AttributeError: 'Series' object has no attribute 'merge'
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

merge関数でleft_index=True,right_index=Trueを指定することでインデックスで結合できます。

import pandas as pd
frame1 = pd.DataFrame({'name':['chika','you','riko','yoshiko','ruby']},index=[2014,2033,2211,3400,3566])
frame2 = pd.DataFrame({'birthday':['0801','0417','0919','0713','0921']},index=[2014,2033,2211,3400,3566])
ret = frame1.merge(frame2,left_index=True,right_index=True)
print(ret)
"""
         name birthday
2014    chika     0801
2033      you     0417
2211     riko     0919
3400  yoshiko     0713
3566     ruby     0921
"""

また、Seriesを結合する場合はconcatが使えます。
参考:Combining two series in pandas along their index [duplicate]

import pandas as pd
frame1 = pd.Series([1.11,2.22,3.33])
frame2 = pd.Series([4.44,5.55,6.66])
ret = pd.concat([frame1, frame2], axis=1)
print(ret)
"""
      0     1
0  1.11  4.44
1  2.22  5.55
2  3.33  6.66
"""

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/24 14:07

    なんともいえませんが、エラーの再現する最小限のコードを追記されると何か分かるかもしれません。
    ちなみに現在質問に挙げられているコードには、カンマが2つあるなどSyntax Errorが発生したため
    当方で書き換えたものを回答にあげました。

    キャンセル

  • 2018/11/25 09:02

    実際に使用しているデータフレームの数字で示しました。
    ご確認よろしくお願いいたします。

    キャンセル

  • 2018/11/25 09:16

    データフレーム(DataFrame)なのではなくシリーズ(Series)なのでは?
    あらたにframe1,frame2の生成部分ソース例も提示ください
    「frame1 = pd.Series(~」のような感じになるはずです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る