2017-10-17 117 views
1

我有兩隻大熊貓dataframes,我想合併/聯合起來合併兩個大熊貓dataframes與時間序列指數

例如:

#required packages 
import os 
import pandas as pd 
import numpy as np 
import datetime as dt 

# create sample time series 
dates1 = pd.date_range('1/1/2000', periods=4, freq='10min') 
dates2 = dates1 
column_names = ['A','B','C'] 
df1 = pd.DataFrame(np.random.randn(4, 3), index=dates1, 
columns=column_names) 
df2 = pd.DataFrame(np.random.randn(4, 3), index=dates2, 
columns=column_names) 

df3 = df1.merge(df2, how='outer', left_index=True, right_index=True, suffixes=('_x', '_y')) 

在這裏,我想在這兩個數據集合並下面的方式(注列的順序):

           A_x  A_y  B_x  B_y  C_x  C_y 
2000-01-01 00:00:00 2000-01-01 00:00:00 -0.572616 -0.867554 -0.382594 1.866238 -0.756318 0.564087 
2000-01-01 00:10:00 2000-01-01 00:10:00 -0.814776 -0.458378 1.011491 0.196498 -0.523433 -0.296989 
2000-01-01 00:20:00 2000-01-01 00:20:00 -0.617766 0.081141 1.405145 -1.183592 0.400720 -0.872507 
2000-01-01 00:30:00 2000-01-01 00:30:00 1.083721 0.137422 -1.013840 -1.610531 -1.258841 0.142301 

我想通過創建一個多索引數據幀或創建用於第二索引的列以保存兩個數據幀索引。使用merge_ordered而不是merge或join會更容易嗎?

任何幫助表示讚賞。

回答

1

使用CONCAT

pd.concat([df1.reset_index().add_suffix('_x'),\ 
df2.reset_index().add_suffix('_y')], axis = 1)\ 
.set_index(['index_x', 'index_y']) 

             A_x  B_x   C_x   A_y   B_y   C_y 
index_x    index_y      
2000-01-01 00:00:00 2000-01-01 00:00:00 -1.437311 -1.414127 0.344057 -0.533669 -0.260106 -1.316879 
2000-01-01 00:10:00 2000-01-01 00:10:00 0.662025 1.860933 -0.485169 -0.825603 -0.973267 -0.760737 
2000-01-01 00:20:00 2000-01-01 00:20:00 -0.300213 0.047812 -2.279631 -0.739694 -1.872261 2.281126 
2000-01-01 00:30:00 2000-01-01 00:30:00 1.499468 0.633967 -1.067881 0.174793 1.197813 -0.879132 
+0

我認爲這是接近我想要的,但列的順序並不是我想要的。我需要訂購A_x A_y B_x B_y ...等等。 有什麼辦法來排序列的方式?也許這是一個排序功能? –

+0

@MooseDrool,你可以使用df.sort_index(axis = 1,inplace = True) – Vaishali

+0

這很有道理! –

2

我想你想concat,而不是合併:

In [11]: pd.concat([df1, df2], keys=["df1", "df2"], axis=1) 
Out[11]: 
          df1       df2 
          A   B   C   A   B   C 
2000-01-01 00:00:00 1.621737 0.093015 -0.698715 0.319212 1.021829 1.707847 
2000-01-01 00:10:00 0.780523 -1.169127 -1.097695 -0.444000 0.170283 1.652005 
2000-01-01 00:20:00 1.560046 -0.196604 -1.260149 0.725005 -1.290074 0.606269 
2000-01-01 00:30:00 -1.074419 -2.488055 -0.548531 -1.046327 0.895894 0.423743 
1

merge確實將合併這兩個指數。

在合併之前,您可以創建df2額外列:

df2["index_2"]=df2.index 

這將創造的最終結果列,這將是該指數在df2值。

請注意,唯一的情況下這個列將不同於索引是當元素沒有出現在df2,在這種情況下,它將爲空,所以我不知道我理解你的最終目標。

相關問題