Saya memiliki dua Seri s1
dan s2
dengan indeks yang sama (tidak berurutan). Bagaimana cara saya menggabungkan s1
dan s2
menjadi dua kolom dalam DataFrame dan menyimpan salah satu indeks sebagai kolom ketiga?
Saya memiliki dua Seri s1
dan s2
dengan indeks yang sama (tidak berurutan). Bagaimana cara saya menggabungkan s1
dan s2
menjadi dua kolom dalam DataFrame dan menyimpan salah satu indeks sebagai kolom ketiga?
Jawaban:
Saya pikir concat
ini cara yang bagus untuk melakukan ini. Jika ada, ia menggunakan atribut nama dari Seri sebagai kolom (jika tidak, nomornya saja):
In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1')
In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2')
In [3]: pd.concat([s1, s2], axis=1)
Out[3]:
s1 s2
A 1 3
B 2 4
In [4]: pd.concat([s1, s2], axis=1).reset_index()
Out[4]:
index s1 s2
0 A 1 3
1 B 2 4
Catatan: Ini meluas ke lebih dari 2 Seri.
pd.concat([list_of_dataframes])
vs concating berkali-kali new_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
atau serupa.
Mengapa Anda tidak menggunakan .to_frame jika keduanya memiliki indeks yang sama?
> = v0.23
a.to_frame().join(b)
< v0.23
a.to_frame().join(b.to_frame())
Panda akan secara otomatis menyelaraskan ini berlalu dalam seri dan membuat indeks gabungan. Mereka kebetulan sama di sini. reset_index
memindahkan indeks ke kolom.
In [2]: s1 = Series(randn(5),index=[1,2,4,5,6])
In [4]: s2 = Series(randn(5),index=[1,2,4,5,6])
In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index()
Out[8]:
index s1 s2
0 1 -0.176143 0.128635
1 2 -1.286470 0.908497
2 4 -0.995881 0.528050
3 5 0.402241 0.458870
4 6 0.380457 0.072251
Kode contoh:
a = pd.Series([1,2,3,4], index=[7,2,8,9])
b = pd.Series([5,6,7,8], index=[7,2,8,9])
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})
Panda memungkinkan Anda untuk membuat DataFrame
dari dict
dengan Series
sebagai nilai dan nama kolom sebagai kunci. Ketika menemukan Series
sebagai nilai, ia menggunakan Series
indeks sebagai bagian dari DataFrame
indeks. Penyelarasan data ini adalah salah satu fasilitas utama Pandas. Akibatnya, kecuali Anda memiliki kebutuhan lain, yang baru dibuat DataFrame
memiliki nilai duplikat. Dalam contoh di atas, data['idx_col']
memiliki data yang sama dengan data.index
.
Jika saya dapat menjawab ini.
Dasar-dasar di balik konversi seri ke bingkai data adalah untuk memahami hal itu
1. Pada tingkat konseptual, setiap kolom dalam bingkai data adalah seri.
2. Dan, setiap nama kolom adalah nama kunci yang memetakan ke seri.
Jika Anda mengingat dua konsep di atas, Anda dapat memikirkan banyak cara untuk mengubah seri menjadi bingkai data. Satu solusi mudah akan seperti ini:
Buat dua seri di sini
import pandas as pd
series_1 = pd.Series(list(range(10)))
series_2 = pd.Series(list(range(20,30)))
Buat bingkai data kosong dengan hanya nama kolom yang diinginkan
df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])
Masukkan nilai seri ke dalam bingkai data menggunakan konsep pemetaan
df['Column_name#1'] = series_1
df['Column_name#2'] = series_2
Periksa hasil sekarang
df.head(5)
Tidak yakin saya sepenuhnya memahami pertanyaan Anda, tetapi apakah ini yang ingin Anda lakukan?
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
( index=s1.index
bahkan tidak perlu di sini)
Penyederhanaan solusi berdasarkan join()
:
df = a.to_frame().join(b)
Saya menggunakan panda untuk mengonversi array numpy atau iseries ke dataframe lalu menambahkan dan menambahkan kolom tambahan dengan kunci sebagai 'prediksi'. Jika Anda perlu dataframe dikonversi kembali ke daftar, maka gunakan values.tolist ()
output=pd.DataFrame(X_test)
output['prediction']=y_pred
list=output.values.tolist()