2014-12-03 25 views
5

Tôi đã hai dataframes (Đợt thực tế) được tạo ra bởi một hoạt động groupby:gấu trúc hợp nhất trên chỉ số không làm việc

bw

l1 
Consumer Discretionary   0.118718 
Consumer Staples    0.089850 
Energy       0.109988 
Financials      0.159418 
Health Care     0.115060 
Industrials     0.109078 
Information Technology   0.200392 
Materials      0.035509 
Telecommunications Services 0.030796 
Utilities      0.031190 
dtype: float64 

pw

l1 
Consumer Discretionary   0.148655 
Consumer Staples    0.067873 
Energy       0.063899 
Financials      0.095689 
Health Care     0.116015 
Industrials     0.181346 
Information Technology   0.117715 
Materials      0.043155 
Telecommunications Services 0.009550 
Utilities      0.156103 
dtype: float64 

Khi tôi cố gắng và merge họ sử dụng

pd.merge(bw,pw,left_index=True,right_index=True)

tôi nhận được một lỗi

Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2883, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-174-739bb362e06d>", line 1, in <module> 
    pd.merge(pw,attr,left_index=True,right_index=True) 
    File "/usr/lib/python2.7/dist-packages/pandas/tools/merge.py", line 39, in merge 
    return op.get_result() 
    File "/usr/lib/python2.7/dist-packages/pandas/tools/merge.py", line 185, in get_result 
    join_index, left_indexer, right_indexer = self._get_join_info() 
    File "/usr/lib/python2.7/dist-packages/pandas/tools/merge.py", line 251, in _get_join_info 
    left_ax = self.left._data.axes[self.axis] 
IndexError: list index out of range 

nhưng khi tôi làm

bw = bw.reset_index() 
pw = pw.reset_index() 
mrg = pd.merge(pw,bw,on="l1") 

Nó hoạt động. Nó làm cho mã của tôi ít dễ đọc hơn nhiều lần lặp lại tuy nhiên vì vậy tôi muốn biết những gì tôi đang làm sai và làm thế nào tôi có thể nhận được phiên bản đầu tiên của mã merging on indexes để hoạt động.

Cảm ơn

+1

Thú vị, có vẻ ổn với tôi. Bạn đang sử dụng phiên bản gấu trúc nào? Ngoài ra, bạn có thể thử dataframe.join() ... bw.join (pw) –

+0

Xin chào @BobHaffner những chú gấu trúc trong kho ubuntu mà tôi nghĩ là 0.14.1. bw.join (pw) cho một lỗi 'AttributeError: 'Series' đối tượng không có thuộc tính 'join'' đó là lý do tại sao tôi đã đi xuống con đường sáp nhập ... –

+1

Ok, bắn. Tôi đã quên rằng tham gia là một điều duy nhất df –

Trả lời

8

Thay đổi hàng loạt vào DataFrame sau đó nó có thể hợp nhất

merged = pd.merge(pd.DataFrame(bw),pd.DataFrame(pw),left_index=True,right_index=True) 
print(merged) 

Kết quả:

        0_x  0_y 
l1            
Consumer Discretionary  0.118718 0.118718 
Consumer Staples    0.089850 0.089850 
Energy      0.109988 0.109988 
Financials     0.159418 0.159418 
Health Care     0.115060 0.115060 
Industrials     0.109078 0.109078 
Information Technology  0.200392 0.200392 
Materials     0.035509 0.222509 
Telecommunications Services 0.030796 0.030796 
Utilities     0.031190 0.031190 

Hoặc nếu việc hợp nhất sẽ được thực hiện một cách song song (bw và pw có cùng một chỉ mục, cùng một số mục).

c = zip(bw.tolist(),pw.tolist()) 
merged = pd.DataFrame(c, index=bw.index) 

phải có cùng kết quả.

Khi bạn reset_index() một chuỗi, nó chuyển thành DataFrame (chỉ mục thành cột). Đó là lý do tại sao bạn có thể hợp nhất sau đó.

Các vấn đề liên quan