Hướng dẫn how do i concatenate two dataframe columns in python? - làm cách nào để nối hai cột khung dữ liệu trong python?
Bộ dữ liệu nhỏ (
hoặc chậm hơn một chút nhưng nhỏ gọn hơn: Show
Các bộ dữ liệu lớn hơn (> 150Rows)
CẬP NHẬT: Thời gian biểu đồ Pandas 0.23.4 Timing graph Pandas 0.23.4 Hãy thử nghiệm nó trên 200k Rows DF:
CẬP NHẬT: Thời gian mới sử dụng Pandas 0.19.0 new timings using Pandas 0.19.0 Thời gian mà không tối ưu hóa CPU/GPU (được sắp xếp từ nhanh nhất đến chậm nhất): without CPU/GPU optimization (sorted from fastest to slowest):
Thời gian bằng cách sử dụng tối ưu hóa CPU/GPU: using CPU/GPU optimization:
Trả lời đóng góp của @Anton-VBR Pandas cung cấp các cơ sở khác nhau để dễ dàng kết hợp với chuỗi hoặc DataFrame với các loại logic đã đặt khác nhau cho các chỉ mục và chức năng đại số quan hệ trong trường hợp hoạt động loại tham gia / hợp nhất. Ngoài ra, Pandas cũng cung cấp các tiện ích để so sánh hai loạt hoặc DataFrame và tóm tắt sự khác biệt của chúng. Các đối tượng kết hợp#Hàm In [6]: result = pd.concat(frames, keys=["x", "y", "z"])4 (trong không gian tên gấu trúc chính) thực hiện tất cả các hoạt động nặng thực hiện các hoạt động nối dọc theo một trục trong khi thực hiện logic đặt tùy chọn (liên kết hoặc giao lộ) của các chỉ mục (nếu có) trên các trục khác. Lưu ý rằng tôi nói rằng nếu có bất kỳ người nào vì chỉ có một trục nối duy nhất có thể cho chuỗi. Trước khi lặn vào tất cả các chi tiết của In [6]: result = pd.concat(frames, keys=["x", "y", "z"])5 và những gì nó có thể làm, đây là một ví dụ đơn giản: In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames) Giống như chức năng anh chị em của nó trên ndarrays, In [6]: result = pd.concat(frames, keys=["x", "y", "z"])6, In [6]: result = pd.concat(frames, keys=["x", "y", "z"])7 lấy một danh sách hoặc chỉ định các đối tượng được gõ đồng nhất và kết hợp chúng với một số xử lý cấu hình của những gì cần làm với các trục khác khác: pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )
Không có một chút bối cảnh, nhiều trong số những lập luận này không có ý nghĩa gì. Hãy để xem lại ví dụ trên. Giả sử chúng tôi muốn liên kết các khóa cụ thể với từng phần của khung dữ liệu băm nhỏ. Chúng ta có thể làm điều này bằng cách sử dụng đối số In [6]: result = pd.concat(frames, keys=["x", "y", "z"])9: In [6]: result = pd.concat(frames, keys=["x", "y", "z"]) Như bạn có thể thấy (nếu bạn đã đọc phần còn lại của tài liệu), chỉ số kết quả của đối tượng có chỉ số phân cấp. Điều này có nghĩa là bây giờ chúng ta có thể chọn từng đoạn bằng khóa:hierarchical index. This means that we can now select out each chunk by key: In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D7 Nó không phải là một sự kéo dài để xem làm thế nào điều này có thể rất hữu ích. Thêm chi tiết về chức năng này dưới đây. Ghi chú Điều đáng chú ý là In [6]: result = pd.concat(frames, keys=["x", "y", "z"])4 (và do đó 00) tạo ra một bản sao đầy đủ của dữ liệu và việc tiếp tục sử dụng lại chức năng này có thể tạo ra một hiệu suất đáng kể. Nếu bạn cần sử dụng thao tác qua một số bộ dữ liệu, hãy sử dụng danh sách hiểu. 0Ghi chú Điều đáng chú ý là In [6]: result = pd.concat(frames, keys=["x", "y", "z"])4 (và do đó 00) tạo ra một bản sao đầy đủ của dữ liệu và việc tiếp tục sử dụng lại chức năng này có thể tạo ra một hiệu suất đáng kể. Nếu bạn cần sử dụng thao tác qua một số bộ dữ liệu, hãy sử dụng danh sách hiểu.Khi kết hợp các khung dữ liệu với các trục được đặt tên, gấu trúc sẽ cố gắng bảo tồn các tên chỉ mục/cột này bất cứ khi nào có thể. Trong trường hợp tất cả các đầu vào chia sẻ một tên chung, tên này sẽ được gán cho kết quả. Khi các tên đầu vào không đồng ý, kết quả sẽ không được đặt tên. Điều tương tự cũng đúng với df.Year.str.cat(df.quarter) 01, nhưng logic được áp dụng riêng biệt trên cơ sở theo cấp độ.Đặt logic trên các trục khác#
Lấy giao lộ, 03. 1 Dưới đây là một ví dụ về từng phương pháp này. Đầu tiên, hành vi 02 mặc định: 2
Đây là điều tương tự với 03: 3Cuối cùng, giả sử chúng tôi chỉ muốn sử dụng lại chỉ mục chính xác từ DataFrame gốc: 4 Tương tự, chúng ta có thể lập chỉ mục trước khi kết hợp:Bỏ qua các chỉ mục trên trục nối# 5 Đối với các đối tượng df.Year.str.cat(df.quarter) 06 mà don lồng có một chỉ mục có ý nghĩa, bạn có thể muốn nối chúng và bỏ qua thực tế là chúng có thể có các chỉ mục chồng chéo. Để làm điều này, hãy sử dụng đối số In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D7 2:Kết hợp với các ndims hỗn hợp# 6 Ghi chú Điều đáng chú ý là In [6]: result = pd.concat(frames, keys=["x", "y", "z"])4 (và do đó 00) tạo ra một bản sao đầy đủ của dữ liệu và việc tiếp tục sử dụng lại chức năng này có thể tạo ra một hiệu suất đáng kể. Nếu bạn cần sử dụng thao tác qua một số bộ dữ liệu, hãy sử dụng danh sách hiểu.Khi kết hợp các khung dữ liệu với các trục được đặt tên, gấu trúc sẽ cố gắng bảo tồn các tên chỉ mục/cột này bất cứ khi nào có thể. Trong trường hợp tất cả các đầu vào chia sẻ một tên chung, tên này sẽ được gán cho kết quả. Khi các tên đầu vào không đồng ý, kết quả sẽ không được đặt tên. Điều tương tự cũng đúng với 01, nhưng logic được áp dụng riêng biệt trên cơ sở theo cấp độ. 7
Đặt logic trên các trục khác# 8 Khi dán nhiều khung dữ liệu, bạn có thể lựa chọn cách xử lý các trục khác (trừ cái được nối). Điều này có thể được thực hiện theo hai cách sau:Lấy sự kết hợp của tất cả, 02. Đây là tùy chọn mặc định vì nó dẫn đến mất thông tin bằng không. 9Lấy giao lộ, 03. 0Dưới đây là một ví dụ về từng phương pháp này. Đầu tiên, hành vi 02 mặc định: 1 Đây là điều tương tự với 03: 2
3 Cuối cùng, giả sử chúng tôi chỉ muốn sử dụng lại chỉ mục chính xác từ DataFrame gốc: 4Nếu bạn muốn chỉ định các cấp độ khác (đôi khi sẽ là trường hợp), bạn có thể làm như vậy bằng cách sử dụng đối số In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D74: 5 6Điều này khá bí truyền, nhưng thực sự cần thiết để thực hiện những thứ như Groupby trong đó thứ tự của một biến phân loại là có ý nghĩa. Nối các hàng vào DataFrame#Nếu bạn có một chuỗi mà bạn muốn nối như một hàng duy nhất vào 06, bạn có thể chuyển đổi hàng thành 06 và sử dụng In [6]: result = pd.concat(frames, keys=["x", "y", "z"])5 7 Bạn nên sử dụng In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D72 với phương pháp này để hướng dẫn DataFrame loại bỏ chỉ mục của nó. Nếu bạn muốn bảo tồn chỉ mục, bạn nên xây dựng một bản dữ liệu được chỉ định một cách thích hợp và nối hoặc nối các đối tượng đó. DataFrame kiểu cơ sở dữ liệu hoặc chuỗi được đặt tên tham gia/hợp nhất#Pandas có các hoạt động tham gia trong bộ nhớ đầy đủ tính năng, hiệu suất cao rất giống với cơ sở dữ liệu quan hệ như SQL. Các phương pháp này thực hiện tốt hơn đáng kể (trong một số trường hợp tốt hơn một thứ tự lớn hơn) so với các triển khai nguồn mở khác (như 35 trong R). Lý do cho điều này là thiết kế thuật toán cẩn thận và bố cục nội bộ của dữ liệu trong 06.high performance in-memory join operations idiomatically very similar to relational databases like SQL. These methods perform significantly better (in some cases well over an order of magnitude better) than other open source implementations
(like 35 in R). The reason for this is careful algorithmic design and the internal layout of the data in 06.Xem sách dạy nấu ăn cho một số chiến lược nâng cao.cookbook for some advanced strategies. Người dùng quen thuộc với SQL nhưng mới với gấu trúc có thể quan tâm đến việc so sánh với SQL.comparison with SQL. Pandas cung cấp một chức năng duy nhất, 37, là điểm nhập cho tất cả các hoạt động tham gia cơ sở dữ liệu tiêu chuẩn giữa các đối tượng 06 hoặc được đặt tên 8
Ghi chú Hỗ trợ chỉ định các mức chỉ mục là các tham số 42, 46 và 47 đã được thêm vào phiên bản 0.23.0. Hỗ trợ hợp nhất các đối tượng 08 đã được thêm vào phiên bản 0.24.0.Loại trả lại sẽ giống như 40. Nếu 40 là 06 hoặc được đặt tên 08 và 41 là một lớp con của 06, loại trả lại vẫn sẽ là 06. 86 là một chức năng trong không gian tên Pandas và nó cũng có sẵn dưới dạng phương thức ví dụ 06 37, với cuộc gọi 06 được coi là đối tượng bên trái trong tham gia.Phương thức 90 liên quan, sử dụng 86 trong nội bộ cho chỉ số chỉ mục (theo mặc định) và (các) chỉ số -on-chỉ số -on. Nếu bạn chỉ tham gia vào chỉ mục, bạn có thể muốn sử dụng 92 để tiết kiệm cho mình một số gõ.Sao mồi ngắn gọn về phương pháp hợp nhất (đại số quan hệ)#Người dùng có kinh nghiệm của các cơ sở dữ liệu quan hệ như SQL sẽ quen thuộc với thuật ngữ được sử dụng để mô tả các hoạt động tham gia giữa hai cấu trúc SQL Table như các cấu trúc ( 06). Có một số trường hợp cần xem xét rất quan trọng để hiểu:
Ghi chú Khi tham gia các cột trên các cột (có khả năng tham gia nhiều-nhiều), bất kỳ chỉ mục nào trên các đối tượng 06 đã được loại bỏ sẽ bị loại bỏ.will be discarded.Điều đáng để dành một chút thời gian để hiểu kết quả của vụ án tham gia nhiều-nhiều. Trong đại số quan hệ SQL / tiêu chuẩn, nếu một sự kết hợp chính xuất hiện nhiều lần trong cả hai bảng, bảng kết quả sẽ có sản phẩm Cartesian của dữ liệu liên quan. Dưới đây là một ví dụ rất cơ bản với một kết hợp khóa duy nhất:many-to-many join case. In SQL / standard relational algebra, if a key combination appears more than once in both tables, the resulting table will have the Cartesian product of the associated data. Here is a very basic example with one unique key combination: 9 Dưới đây là một ví dụ phức tạp hơn với nhiều khóa tham gia. Chỉ có các khóa xuất hiện trong 40 và 41 mới có mặt (giao điểm), vì 99 theo mặc định. 0
Đối số 52 cho 86 chỉ định cách xác định các khóa nào sẽ được đưa vào bảng kết quả. Nếu một kết hợp khóa không xuất hiện trong các bảng bên trái hoặc bên phải, các giá trị trong bảng được nối sẽ là 02. Dưới đây là bản tóm tắt các tùy chọn 52 và tên tương đương SQL của chúng:does not appear in either the left or right tables, the values in the joined table will be 02. Here is a summary of the 52 options and their SQL equivalent names:
1 2 3
4 5 Bạn có thể hợp nhất một chuỗi đa chỉ số và một DataFrame, nếu tên của Multi Index tương ứng với các cột từ DataFrame. Chuyển đổi chuỗi thành DataFrame bằng cách sử dụng 14 trước khi hợp nhất, như được hiển thị trong ví dụ sau. 6Dưới đây là một ví dụ khác với các khóa tham gia trùng lặp trong DataFrames: 7
Cảnh báo Tham gia / hợp nhất trên các phím trùng lặp có thể gây ra khung được trả về là phép nhân của kích thước hàng, có thể dẫn đến tràn bộ nhớ. Trách nhiệm của người dùng là quản lý các giá trị trùng lặp trong các khóa trước khi tham gia các khung dữ liệu lớn. Kiểm tra các phím trùng lặp#Người dùng có thể sử dụng đối số 74 để tự động kiểm tra xem có các bản sao bất ngờ trong các khóa hợp nhất của họ không. Tính độc đáo chính được kiểm tra trước khi hoạt động hợp nhất và vì vậy nên bảo vệ chống tràn bộ nhớ. Kiểm tra tính duy nhất quan trọng cũng là một cách tốt để đảm bảo cấu trúc dữ liệu người dùng như mong đợi.Trong ví dụ sau, có các giá trị trùng lặp của 16 ở bên phải 06. Vì đây không phải là sự hợp nhất một-một-như được chỉ định trong đối số 74-một ngoại lệ sẽ được nêu ra. 8 9Nếu người dùng biết về các bản sao ở bên phải 06 nhưng muốn đảm bảo không có bản sao trong DataFrame bên trái, người ta có thể sử dụng đối số 20 thay thế, điều này sẽ không gây ra ngoại lệ.
0Chỉ báo hợp nhất# 37 chấp nhận đối số 66. Nếu 49, một cột loại phân loại được gọi là 67 sẽ được thêm vào đối tượng đầu ra có giá trị:
1Đối số 66 cũng sẽ chấp nhận các đối số chuỗi, trong trường hợp đó hàm chỉ báo sẽ sử dụng giá trị của chuỗi được truyền làm tên cho cột chỉ báo. 2Hợp nhất dtypes#Hợp nhất sẽ bảo tồn DTYPE của các phím tham gia. 3Chúng tôi có thể bảo tồn các phím tham gia: 4Tất nhiên nếu bạn có các giá trị bị thiếu được giới thiệu, thì DTYPE kết quả sẽ được Upcast. 5Hợp nhất sẽ bảo tồn 32 DTYPE của các vụ sáp nhập. Xem thêm phần về phân loại.categoricals.Khung bên trái. 6Khung phù hợp. 7Kết quả được hợp nhất: 8Ghi chú Các DTYPE danh mục phải hoàn toàn giống nhau, có nghĩa là cùng một loại và thuộc tính được đặt hàng. Nếu không, kết quả sẽ ép buộc các danh mục DTYPE. Ghi chú Các DTYPE danh mục phải hoàn toàn giống nhau, có nghĩa là cùng một loại và thuộc tính được đặt hàng. Nếu không, kết quả sẽ ép buộc các danh mục DTYPE. Hợp nhất trên df['Year'].astype(str) + df['quarter'] 32 DTYPE giống nhau có thể khá hiệu quả so với việc hợp nhất df['Year'].astype(str) + df['quarter'] 34 DTYPE.Tham gia trên Index# 9 0 35 là một phương pháp thuận tiện để kết hợp các cột của hai chỉ số có khả năng khác nhau 36 thành một kết quả duy nhất 06. Đây là một ví dụ rất cơ bản: 1
Giống như trên, nhưng với 99. 2 3
Sự liên kết dữ liệu ở đây là trên các chỉ mục (nhãn hàng). Hành vi tương tự này có thể đạt được bằng cách sử dụng df.Year.str.cat(df.quarter) 86 cộng với các đối số bổ sung hướng dẫn nó sử dụng các chỉ mục:Tham gia các cột khóa trên một chỉ mục# 4 90 có một đối số 42 tùy chọn có thể là một cột hoặc nhiều tên cột, trong đó chỉ định rằng 06 đã vượt qua sẽ được căn chỉnh trên cột đó trong 06. Hai cuộc gọi chức năng này hoàn toàn tương đương: 5 6 Rõ ràng bạn có thể chọn bất kỳ hình thức nào bạn thấy thuận tiện hơn. Đối với các lần tham gia nhiều-một (trong đó một trong số ____ 106 đã được lập chỉ mục bởi khóa tham gia), sử dụng In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D71 có thể thuận tiện hơn. Đây là một ví dụ đơn giản: 7Để tham gia vào nhiều khóa, DataFrame được truyền phải có 01: 8 Bây giờ điều này có thể được nối bằng cách truyền hai tên cột chính: 9 Mặc định cho 92 là thực hiện tham gia bên trái (về cơ bản là hoạt động của VLookup, cho người dùng Excel), chỉ sử dụng các khóa được tìm thấy trong DataFrame gọi. Ví dụ, các loại tham gia khác, có thể dễ dàng thực hiện:Như bạn có thể thấy, điều này làm giảm bất kỳ hàng nào không có trận đấu.Tham gia một chỉ mục duy nhất vào Multiindex# In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)0 Bạn có thể tham gia một 06 chỉ số đơn với mức độ đa dạng 06. Cấp độ sẽ khớp với tên của chỉ mục của khung hình đơn lẻ so với tên cấp độ của khung đa dạng.In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)1 Điều này tương đương nhưng ít dài dòng hơn và tiết kiệm bộ nhớ / nhanh hơn thế này.Tham gia với hai đa dạng# In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)2 Điều này được hỗ trợ theo cách hạn chế, với điều kiện là chỉ mục cho đối số bên phải được sử dụng hoàn toàn trong tham gia và là một tập hợp con của các chỉ số trong đối số bên trái, như trong ví dụ này: In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)3 Nếu điều kiện đó không được thỏa mãn, có thể thực hiện một lần tham gia với hai chỉ số đa chỉ số bằng mã sau.Hợp nhất trên kết hợp các cột và cấp chỉ mục# In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)4 Ghi chú Các DTYPE danh mục phải hoàn toàn giống nhau, có nghĩa là cùng một loại và thuộc tính được đặt hàng. Nếu không, kết quả sẽ ép buộc các danh mục DTYPE. Ghi chú Các DTYPE danh mục phải hoàn toàn giống nhau, có nghĩa là cùng một loại và thuộc tính được đặt hàng. Nếu không, kết quả sẽ ép buộc các danh mục DTYPE. Ghi chú Các DTYPE danh mục phải hoàn toàn giống nhau, có nghĩa là cùng một loại và thuộc tính được đặt hàng. Nếu không, kết quả sẽ ép buộc các danh mục DTYPE. Hợp nhất trên df['Year'].astype(str) + df['quarter'] 32 DTYPE giống nhau có thể khá hiệu quả so với việc hợp nhất df['Year'].astype(str) + df['quarter'] 34 DTYPE.Tham gia trên Index# In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)5 35 là một phương pháp thuận tiện để kết hợp các cột của hai chỉ số có khả năng khác nhau 36 thành một kết quả duy nhất 06. Đây là một ví dụ rất cơ bản: Giống như trên, nhưng với 99.In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)7 Sự liên kết dữ liệu ở đây là trên các chỉ mục (nhãn hàng). Hành vi tương tự này có thể đạt được bằng cách sử dụng df.Year.str.cat(df.quarter) 86 cộng với các đối số bổ sung hướng dẫn nó sử dụng các chỉ mục:Tham gia các cột khóa trên một chỉ mục# In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)8 df.Year.str.cat(df.quarter) 90 có một đối số df.Year.str.cat(df.quarter) 42 tùy chọn có thể là một cột hoặc nhiều tên cột, trong đó chỉ định rằng df.Year.str.cat(df.quarter) 06 đã vượt qua sẽ được căn chỉnh trên cột đó trong df.Year.str.cat(df.quarter) 06. Hai cuộc gọi chức năng này hoàn toàn tương đương:Rõ ràng bạn có thể chọn bất kỳ hình thức nào bạn thấy thuận tiện hơn. Đối với các lần tham gia nhiều-một (trong đó một trong số ____ 106 đã được lập chỉ mục bởi khóa tham gia), sử dụng In [7]: result.loc["y"] Out[7]: A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D71 có thể thuận tiện hơn. Đây là một ví dụ đơn giản: In [1]: df1 = pd.DataFrame( ...: { ...: "A": ["A0", "A1", "A2", "A3"], ...: "B": ["B0", "B1", "B2", "B3"], ...: "C": ["C0", "C1", "C2", "C3"], ...: "D": ["D0", "D1", "D2", "D3"], ...: }, ...: index=[0, 1, 2, 3], ...: ) ...: In [2]: df2 = pd.DataFrame( ...: { ...: "A": ["A4", "A5", "A6", "A7"], ...: "B": ["B4", "B5", "B6", "B7"], ...: "C": ["C4", "C5", "C6", "C7"], ...: "D": ["D4", "D5", "D6", "D7"], ...: }, ...: index=[4, 5, 6, 7], ...: ) ...: In [3]: df3 = pd.DataFrame( ...: { ...: "A": ["A8", "A9", "A10", "A11"], ...: "B": ["B8", "B9", "B10", "B11"], ...: "C": ["C8", "C9", "C10", "C11"], ...: "D": ["D8", "D9", "D10", "D11"], ...: }, ...: index=[8, 9, 10, 11], ...: ) ...: In [4]: frames = [df1, df2, df3] In [5]: result = pd.concat(frames)9 Để tham gia vào nhiều khóa, DataFrame được truyền phải có 01:pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )0 Bây giờ điều này có thể được nối bằng cách truyền hai tên cột chính: pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )1 Mặc định cho df.Year.str.cat(df.quarter) 92 là thực hiện tham gia bên trái (về cơ bản là hoạt động của VLookup, cho người dùng Excel), chỉ sử dụng các khóa được tìm thấy trong DataFrame gọi. Ví dụ, các loại tham gia khác, có thể dễ dàng thực hiện:Như bạn có thể thấy, điều này làm giảm bất kỳ hàng nào không có trận đấu.Tham gia một chỉ mục duy nhất vào Multiindex# pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )2 Hợp nhất ASOF#Một 71 tương tự như một tham số bên trái được đặt hàng ngoại trừ việc chúng tôi khớp với khóa gần nhất thay vì các phím bằng nhau. Đối với mỗi hàng trong 40 06, chúng tôi chọn hàng cuối cùng trong 41 06 có khóa 42 nhỏ hơn phím bên trái. Cả hai khung dữ liệu phải được sắp xếp theo khóa.Tùy chọn hợp nhất ASOF có thể thực hiện hợp nhất nhóm khôn ngoan. Điều này phù hợp với khóa 77 như nhau, ngoài trận đấu gần nhất trên khóa 42.Ví dụ; Chúng tôi có thể có 79 và 80 và chúng tôi muốn 81 hợp nhất chúng.pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )3 pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )4 Theo mặc định, chúng tôi đang lấy ASOF của các trích dẫn. pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )5 Chúng tôi chỉ có ASOF trong 82 giữa thời gian báo giá và thời gian thương mại.pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )6 Chúng tôi chỉ ASOF trong 83 giữa thời gian báo giá và thời gian giao dịch và chúng tôi loại trừ các trận đấu chính xác đúng hạn. Lưu ý rằng mặc dù chúng tôi loại trừ các trận đấu chính xác (của các trích dẫn), các trích dẫn trước đó được truyền đến thời điểm đó.do propagate to that point in time.pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )7 So sánh các đối tượng#Các phương thức 84 và 84 cho phép bạn so sánh hai lần tương ứng hoặc chuỗi dữ liệu và tóm tắt sự khác biệt của chúng.Tính năng này đã được thêm vào trong v1.1.0.V1.1.0. Ví dụ: bạn có thể muốn so sánh hai 06 và xếp chồng sự khác biệt của chúng cạnh nhau.pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )8 pd.concat( objs, axis=0, join="outer", ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True, )9 In [6]: result = pd.concat(frames, keys=["x", "y", "z"])0 Theo mặc định, nếu hai giá trị tương ứng bằng nhau, chúng sẽ được hiển thị là 87. Hơn nữa, nếu tất cả các giá trị trong toàn bộ hàng / cột, hàng / cột sẽ bị bỏ qua từ kết quả. Sự khác biệt còn lại sẽ được căn chỉnh trên các cột.Nếu bạn muốn, bạn có thể chọn xếp chồng sự khác biệt trên các hàng. In [6]: result = pd.concat(frames, keys=["x", "y", "z"])1 Nếu bạn muốn giữ tất cả các hàng và cột gốc, hãy đặt đối số 88 thành 49.In [6]: result = pd.concat(frames, keys=["x", "y", "z"])2 Bạn cũng có thể giữ tất cả các giá trị ban đầu ngay cả khi chúng bằng nhau. In [6]: result = pd.concat(frames, keys=["x", "y", "z"])3 Làm thế nào để tôi kết hợp hai cột trong Python?DF ['Tên cột mới'] = DF ['Tên cột 1'] + DF ['Tên cột thứ 2'] + ... Lưu ý rằng ký hiệu cộng (' +') được sử dụng để thực hiện kết nối.Bạn có thể bỏ qua lỗi này bằng cách ánh xạ các giá trị thành các chuỗi bằng cú pháp sau: DF ['Tên cột mới'] = DF ['Tên cột 1']. Notice that the plus symbol ('+') is used to perform the concatenation. You can bypass this error by mapping the values to strings using the following syntax: df['New Column Name'] = df['1st Column Name'].
Làm cách nào để kết hợp hai cột với DataFrame?Để hợp nhất hai pandas dataFrame với cột chung, hãy sử dụng hàm Merge () và đặt tham số ON làm tên cột.use the merge() function and set the ON parameter as the column name.
Làm thế nào để bạn kết hợp với DataFrame trong Python?Sử dụng phương thức dataFrame.Append () để kết hợp các khung dữ liệu trên các hàng.Cho E.X, DF.Phụ lục (DF1) nối DF1 vào DFAFrame DF.
append() method to concatenate DataFrames on rows. For E.x, df. append(df1) appends df1 to the df DataFrame.
Làm thế nào để bạn kết hợp hai DataFrames theo chiều ngang trong Python?Sử dụng PD ... DataFrame1 = Pd.DataFrame ([[1, 2], [4, 5]]). dataFrame2 = pd.DataFrame ([[2, 1], [5, 4]]). Concatenated_dataFrames = pd.Concat ([dataFrame1, dataFrame2], trục = 1). |