Pertanyaan panda bergabung pada indeks tidak berfungsi


Saya memiliki dua dataframe (Seri sebenarnya) yang dihasilkan oleh operasi groupby:

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

dan 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

Ketika saya mencoba dan merge mereka menggunakan

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

Saya mendapat kesalahan

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

tetapi ketika saya melakukannya

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

Berhasil. Itu membuat kode saya jauh lebih mudah dibaca melalui beberapa iterasi gabungan, jadi saya ingin tahu apa yang saya lakukan salah dan bagaimana saya bisa mendapatkan versi pertama dari kode merging on indexes bekerja.

Terima kasih


6
2017-12-03 21:12


asal


Jawaban:


Ubah seri menjadi DataFrame maka dimungkinkan untuk menggabungkan

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

Hasil:

                                 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

Atau jika penggabungan dilakukan secara paralel (bw dan pw memiliki indeks yang sama, jumlah item yang sama).

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

harus memiliki hasil yang sama.

Ketika kamu reset_index() seri, berubah menjadi DataFrame (indeks ke kolom). Itulah mengapa Anda bisa bergabung setelah itu.


9
2017-12-04 00:49