4 Câu hỏi: vị trí hoặc di chuyển cột gấu trúc đến một chỉ mục cột cụ thể

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đã googled nhưng dường như tôi không thể tìm thấy câu trả lời cho câu hỏi này, hoặc có thể tôi đang đặt câu hỏi sai cách?

Tôi có DF mydataframe và nó có nhiều cột (hơn 75 cột) với chỉ số số mặc định:

Col1 Col2 Col3 ... Coln

Tôi cần sắp xếp /thay đổi vị trí như sau:

Col1 Col3 Col2 ... Coln 

Tôi có thể lấy chỉ số Col2 bằng cách sử dụng:

mydataframe.columns.get_loc("Col2")

nhưng tôi dường như không thể tìm ra cách trao đổi, mà không liệt kê thủ công tất cả các cột và sau đó sắp xếp lại theo cách thủ công trong danh sách.

    
1
4 Câu trả lời                              4                         

Cách tiến hành:

  1. lưu trữ tên của các cột trong danh sách;
  2. hoán đổi tên trong danh sách đó;
  3. áp dụng thứ tự mới trên khung dữ liệu.

:

l = list(df)

i1, i2 = l.index('Col2'), l.index('Col3')
l[i2], l[i1] = l[i1], l[i2]

df = df[l]
    
1
2019-05-08 16: 27: 45Z
  1. Tôi đã có thể mở rộng về điều này để phù hợp với nhu cầu của mình. Cảm ơn bạn.
    2019-05-09 14: 55: 30Z

Hãy thử:

new_cols = [Col1, Col3, Col2] + df.columns[3:]

df = df[new_cols]
    
1
2019-05-08 15: 56: 09Z

Tôi đang tưởng tượng bạn muốn những gì @sentence đang giả định. Bạn muốn hoán đổi vị trí của 2 cột bất kể vị trí của chúng.

Đây là cách tiếp cận sáng tạo:

  1. Tạo một từ điển xác định cột nào được chuyển đổi với cái gì.
  2. Xác định chức năng lấy tên cột và trả về đơn hàng.
  3. Sử dụng chức năng đó làm chìa khóa để sắp xếp.
d = {'Col3': 'Col2', 'Col2': 'Col3'}
k = lambda x: df.columns.get_loc(d.get(x, x))

df[sorted(df, key=k)]

   Col0  Col1  Col3  Col2  Col4
0     0     1     3     2     4
1     5     6     8     7     9
2    10    11    13    12    14
3    15    16    18    17    19
4    20    21    23    22    24

Cài đặt

df = pd.DataFrame(
    np.arange(25).reshape(5, 5)
).add_prefix('Col')
    
0
2019-05-08 16: 46: 25Z

Sử dụng np.r_ để tạo mảng chỉ mục cột:

Cho mẫu như sau:

df:
   col1  col2  col3  col4  col5  col6  col7  col8  col9  col10
0     0     1     2     3     4     5     6     7     8      9
1    10    11    12    13    14    15    16    17    18     19


i, j = df.columns.slice_locs('col2', 'col10')
df[df.columns[np.r_[:i, i+1, i, i+2:j]]]

Out[142]:
   col1  col3  col2  col4  col5  col6  col7  col8  col9  col10
0     0     2     1     3     4     5     6     7     8      9
1    10    12    11    13    14    15    16    17    18     19
    
0
2019-05-08 18: 02: 16Z
nguồn đặt đây