Tôi có hai Series s1
và s2
có cùng chỉ số (không liên tiếp). Làm cách nào để kết hợp s1
và s2
trở thành hai cột trong DataFrame và giữ một trong các chỉ mục làm cột thứ ba?
Tôi có hai Series s1
và s2
có cùng chỉ số (không liên tiếp). Làm cách nào để kết hợp s1
và s2
trở thành hai cột trong DataFrame và giữ một trong các chỉ mục làm cột thứ ba?
Câu trả lời:
Tôi nghĩ concat
là một cách tốt đẹp để làm điều này. Nếu chúng có mặt, nó sử dụng các thuộc tính tên của Sê-ri làm cột (nếu không, nó chỉ đơn giản là đánh số chúng):
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
Lưu ý: Điều này mở rộng đến hơn 2 Series.
pd.concat([list_of_dataframes])
so với concating nhiều lần new_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
hoặc tương tự.
Tại sao bạn không sử dụng .to_frame nếu cả hai có cùng chỉ mục?
> = v0.23
a.to_frame().join(b)
< v0.23
a.to_frame().join(b.to_frame())
Gấu trúc sẽ tự động sắp xếp những thứ này được truyền theo chuỗi và tạo ra chỉ số chung Chúng tình cờ giống nhau ở đây. reset_index
di chuyển chỉ mục đến một cột.
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
Mã ví dụ:
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})
Pandas cho phép bạn tạo một DataFrame
từ a dict
với Series
các giá trị và tên cột làm khóa. Khi nó tìm thấy một Series
giá trị, nó sử dụng Series
chỉ mục như là một phần của DataFrame
chỉ mục. Căn chỉnh dữ liệu này là một trong những đặc quyền chính của Pandas. Do đó, trừ khi bạn có nhu cầu khác, mới được tạo DataFrame
có giá trị trùng lặp. Trong ví dụ trên, data['idx_col']
có cùng dữ liệu với data.index
.
Nếu tôi có thể trả lời điều này.
Các nguyên tắc cơ bản đằng sau chuỗi chuyển đổi sang khung dữ liệu là để hiểu rằng
1. Ở cấp độ khái niệm, mỗi cột trong khung dữ liệu là một chuỗi.
2. Và, mỗi tên cột là một tên chính ánh xạ tới một chuỗi.
Nếu bạn luôn nhớ đến hai khái niệm trên, bạn có thể nghĩ ra nhiều cách để chuyển đổi chuỗi thành khung dữ liệu. Một giải pháp dễ dàng sẽ như thế này:
Tạo hai loạt ở đây
import pandas as pd
series_1 = pd.Series(list(range(10)))
series_2 = pd.Series(list(range(20,30)))
Tạo một khung dữ liệu trống chỉ với các tên cột mong muốn
df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])
Đặt giá trị chuỗi trong khung dữ liệu bằng khái niệm ánh xạ
df['Column_name#1'] = series_1
df['Column_name#2'] = series_2
Kiểm tra kết quả ngay bây giờ
df.head(5)
Không chắc chắn tôi hoàn toàn hiểu câu hỏi của bạn, nhưng đây có phải là những gì bạn muốn làm?
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
( index=s1.index
thậm chí không cần thiết ở đây)
Đơn giản hóa giải pháp dựa trên join()
:
df = a.to_frame().join(b)
Tôi đã sử dụng gấu trúc để chuyển đổi mảng numpy hoặc iseries của mình sang một khung dữ liệu sau đó thêm và thêm cột bổ sung theo khóa như 'dự đoán'. Nếu bạn cần dataframe được chuyển đổi trở lại danh sách thì hãy sử dụng value.tolist ()
output=pd.DataFrame(X_test)
output['prediction']=y_pred
list=output.values.tolist()