

以下の表のように、  
同じ意味でラベル名が異なっている2つのデータフレームを結合しようと  
した場合、どのようにすればよいのでしょうか？

通常だと、以下のような答えになるかと思うのですが・・・  
pd.merge(A,B,on="日付")

ちなみに、日付、Dateそれぞれindexとして定義してあります。

* * *
[code]

    A
        日付   価格
    2000-01-05 100
    2000-01-06 110 
    2000-01-07 120
    
    B
        Date   price
    2000-01-05 50
    2000-01-06 60
    2000-01-08 70
    
    
[/code]


CC BY-SA 4.0
2019-06-23T12:36:13.227
56037
2019-06-25T08:14:25.957
2019-06-25T08:14:25.957
19110
31764
question
python python3 pandas
ラベル名が異なる場合のmergeについて


「ラベル名が異なる場合のmergeについて」⇒ラベル名を合わせろ！では回答になってないと思いますが  
結果が欲しいなら下記の方法でできます。  
indexとカラム名を変更して、concatでマージします。

[code]

    import pandas as pd
    dateA = pd.DatetimeIndex(['2000-01-05','2000-01-06','2000-01-07'],name='日付')
    dateB = pd.DatetimeIndex(['2000-01-05','2000-01-06','2000-01-08'],name='Date')
    
    A = pd.DataFrame({'価格':[100,110,120]},index=dateA)
    B = pd.DataFrame({'price':[50,60,70]},index=dateB)
    
    tmp = B.rename_axis('日付') #indexの名前を変える
    tmp = tmp.rename(index=str, columns={'price': '価格'}) #columnの名前を変える
    tmp = pd.concat([A, tmp], ignore_index=False) # concatでマージ
    AB = tmp
    
[/code]

ABに結果は、入っていますが日付が同じものがあるので、以下追加して

[code]

    tmp['日付'] = tmp.index # AとBで日付が重複しているので違うなにかの価格とするとindexにいると扱いにくいので
    tmp.index = range(len(tmp.index)) #日付をcolumnに追い出す
    tmp = tmp[['日付','価格']] # columnの順番入れ替え
    AB = tmp.sort_values(by=['日付'], ascending=True) #日付でソート
    
[/code]

多分、こういうコードを書きたくないので１操作で出来る方法を質問したとおもいますので  
スマートな回答があるまではこちらを使えばマージはできます。


CC BY-SA 4.0
2019-06-24T02:21:47.990
56046
2019-06-24T02:21:47.990
34277
56037
answer


> ちなみに、日付、Dateそれぞれindexとして定義してあります

であれば、パラメータに , left_index=True と right_index=True を渡すだけではないでしょうか

[code]

    import pandas as pd
    df_A = pd.DataFrame({'価格':[100,110,120]},
                        index=pd.Index(pd.date_range('20000105', periods=3, freq='d'), name='日付'))
    df_B = pd.DataFrame({'price':[50,60,70]},
                        index=pd.Index(pd.date_range('20000105', periods=3, freq='d'), name='Date'))
    print(pd.merge(df_A, df_B, left_index=True, right_index=True))
    #             価格  price
    #日付
    #2000-01-05  100     50
    #2000-01-06  110     60
    #2000-01-07  120     70
    
[/code]


CC BY-SA 4.0
2019-06-25T07:37:32.377
56084
2019-06-25T07:37:32.377
24801
56037
answer