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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

6165閲覧

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

shunsuke1937

総合スコア48

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/11/24 02:48

編集2018/11/25 00:02

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

python

1import pandas as pd 2frame1 = pd.DataFrame( 3 {'name':['chika','you','riko','yoshiko','ruby']}, 4 ,columns=[name],index=[2014,2033,2211,3400,3566] 5 ) 6print(frame1) 7#frame1: 8#number name 9#2014 chika 10#2033 you 11#2211 riko 12#3400 yoshiko 13#3566 ruby 14 15frame2 = pd.DataFrame( 16 {'birthday':['0801','0417','0919','0713','0921']}, 17 ,columns=[birthday],index=[2014,2033,2211,3400,3566] 18 ) 19print(frame2) 20#frame2: 21#number birthday 22#2014 0801 23#2033 0417 24#2211 0919 25#3400 0713 26#3566 0921 27 28#上記のframe1とframe2結合して下記のように結果を出したいと思っております。 29 30#number name birthday 31#2014 chika 0801 32#2033 you 0417 33#2211 riko 0919 34#3400 yoshiko 0713 35#3566 ruby 0921

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

python

1import pandas as pd 2frame1 = pd.DataFrame({'name':['chika','you','riko','yoshiko','ruby']},index=[2014,2033,2211,3400,3566]) 3frame2 = pd.DataFrame({'birthday':['0801','0417','0919','0713','0921']},index=[2014,2033,2211,3400,3566]) 4ret = frame1.merge(frame2,left_index=True,right_index=True) 5print(ret) 6""" 7 name birthday 82014 chika 0801 92033 you 0417 102211 riko 0919 113400 yoshiko 0713 123566 ruby 0921 13"""

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

python

1#frame1 2#number 3#2014 5.894737 4#2538 7.214286 5#2698 5.583333 6#2785 7.000000 7#2787 7.764706 8#2816 5.722222 9#2820 0.000000 10# ・・・ 11#Length: 1606, dtype: float64 12 13#frame2 14#number 15#2014 5.894737 16#2538 7.214286 17#2698 5.583333 18#2785 7.000000 19#2787 7.764706 20#2816 5.722222 21#2820 0.000000 22# ・・・ 23#Length: 1606, dtype: float64 24import pandas as pd 25ret = frame1.merge(frame2,left_index=True,right_index=True) 26 27#結果 28#AttributeError: 'Series' object has no attribute 'merge'

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

Python

1import pandas as pd 2frame1 = pd.DataFrame({'name':['chika','you','riko','yoshiko','ruby']},index=[2014,2033,2211,3400,3566]) 3frame2 = pd.DataFrame({'birthday':['0801','0417','0919','0713','0921']},index=[2014,2033,2211,3400,3566]) 4ret = frame1.merge(frame2,left_index=True,right_index=True) 5print(ret) 6""" 7 name birthday 82014 chika 0801 92033 you 0417 102211 riko 0919 113400 yoshiko 0713 123566 ruby 0921 13"""

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

Python

1import pandas as pd 2frame1 = pd.Series([1.11,2.22,3.33]) 3frame2 = pd.Series([4.44,5.55,6.66]) 4ret = pd.concat([frame1, frame2], axis=1) 5print(ret) 6""" 7 0 1 80 1.11 4.44 91 2.22 5.55 102 3.33 6.66 11"""

投稿2018/11/24 02:58

編集2018/11/25 00:24
can110

総合スコア38258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shunsuke1937

2018/11/24 04:43

ご回答いただきありがとうございます。 ここで下記のようなエラーが返ってきました。 AttributeError: 'Series' object has no attribute 'merge' いろいろmerge関数について調べてみましたが、 こちらのerrorについては解決できない状況です。 ご確認のほどよろしくお願いいたします。
can110

2018/11/24 04:46

私の回答コードでそのエラーが発生したということでしょうか?
shunsuke1937

2018/11/24 05:04

ご回答いただきました、コードではエラーは発生しておりません。 現在私の方で書いているindexやcolumnsは別のものになりますが、 上記と同じデータフレームの構造をしておりますので、例として質問文には示しております
can110

2018/11/24 05:07

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

2018/11/25 00:02

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

2018/11/25 00:16

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問