Saya mencoba menggabungkan beberapa kerangka data dengan operasi penggabungan berturut-turut, saya ingin menambahkan akhiran ke nama nama kolom yang baru digabungkan. Versi sederhana dari kode saya terlihat seperti ini:
from pandas import *
f0 = DataFrame(columns=['data'], data=[1,2,3], index=['a','b','c'])
f1 = DataFrame(columns=['data'], data=[4,5,6], index=['c','b','a'])
f2 = DataFrame(columns=['data'], data=[7,8,9], index=['a','c','b'])
merged = f0
merged = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
merged = merged.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
print merged.columns
Dengan pandas 0.15.2 pada python 2.7 ini mengembalikan:
Index([u'data_0', u'data_1', u'data'], dtype='object')
sementara saya harapkan
Index([u'data_0', u'data_1', u'data_2'], dtype='object')
sepertinya kamu hanya menginginkan ini?
In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]:
0 1 2
a 1 6 7
b 2 5 9
c 3 4 8
sufiks hanya berlaku jika ada kolom duplikat yang setelah penggabungan pertama tidak ada (bila dibandingkan dengan yang ke-3)
In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
In [47]: merged1
Out[47]:
data_0 data_1
c 3 4
b 2 5
a 1 6
In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]:
data_0 data_1 data
a 1 6 7
c 3 4 8
b 2 5 9
Ah terima kasih atas penjelasannya, saya melewatkan fakta bahwa sufiks hanya diterapkan pada nama kolom duplikat. Dan memang solusi concat lebih sederhana. Dan sebagai catatan: concat(... mengabaikan_index=True) persis kebalikan dari apa yang saya inginkan, tetapi dengan concat(... mengabaikan_index=False) bekerja dengan baik.
gr8
perlu diingat bahwa Anda biasanya tidak ingin memiliki kolom duplikat
Anda mungkin menginginkan hasil multi level - gunakan argumen kunci untuk menggabungkan
Komentar yang paling membantu
sepertinya kamu hanya menginginkan ini?
sufiks hanya berlaku jika ada kolom duplikat yang setelah penggabungan pertama tidak ada (bila dibandingkan dengan yang ke-3)