Tôi muốn đặt lại chỉ mục dựa trên danh sách
Giả sử tôi có DataFrame như thế này
list = ['RGB','RBR','RGD']
a b
RBR 0 1
RGD 10 2
RGB 11 3
RGD 10 2
RGD 10 2
RGD 10 2
RBR 0 1
RGB 11 3
df.reindex[index=list]
Tệp "C: \ Users \ Yugas \ AppData \ Local \ Program \ Python \ Python36 \ lib \ Site-Packages \ Pandas \ Core \ indexes \ base.py" trục "]
ValueError: Không thể tái xuất từ trục trùng lặp
Bất kỳ cách nào khác tôi có thể làm điều này?
Đã hỏi ngày 24 tháng 6 năm 2018 lúc 14:32Jun 24, 2018 at 14:32
1
Không làm lại chỉ cần sử dụng
li = ['RGB','RBR','RGD']
df = df.loc[li]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
1, tức làli = ['RGB','RBR','RGD']
df = df.loc[li]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
Đã trả lời ngày 24 tháng 6 năm 2018 lúc 14:46Jun 24, 2018 at 14:46
BharathbharathBharath
29.1k5 Huy hiệu vàng54 Huy hiệu bạc101 Huy hiệu đồng5 gold badges54 silver badges101 bronze badges
Bạn có các giá trị trùng lặp trong chỉ mục của bạn.
li = ['RGB','RBR','RGD']
df = df.loc[li]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
2 yêu cầu chỉ mục của bạn phải là duy nhất.Một giải pháp hiệu quả có sẵn cho gấu trúc là dữ liệu phân loại, cẩn thận để chỉ định
li = ['RGB','RBR','RGD']
df = df.loc[li]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
3.L = ['RGB', 'RBR', 'RGD']
df.index = pd.Categorical[df.index, categories=L, ordered=True]
res = df.sort_index[]
print[res]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
Đã trả lời ngày 24 tháng 6 năm 2018 lúc 14:36Jun 24, 2018 at 14:36
JPPJPPjpp
152K32 Huy hiệu vàng257 Huy hiệu bạc319 Huy hiệu đồng32 gold badges257 silver badges319 bronze badges
Tạo một DataFrame hoặc Sê -ri mới với Đặt lại chỉ mục. Điều này rất hữu ích khi chỉ mục cần được coi là một cột hoặc khi chỉ mục là vô nghĩa và cần được đặt lại về mặc định trước khi hoạt động khác. Đối với một loạt có đa dạng, chỉ loại bỏ các mức được chỉ định khỏi chỉ mục. Loại bỏ tất cả các cấp theo mặc định. Chỉ cần đặt lại chỉ mục, mà không cần chèn nó làm cột trong DataFrame mới. Tên để sử dụng cho cột chứa các giá trị chuỗi ban đầu. Sử dụng
4 theo mặc định. Đối số này bị bỏ qua khi thả là đúng.li = ['RGB','RBR','RGD']
df = df.loc[li]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
Sửa đổi chuỗi tại chỗ [không tạo một đối tượng mới].
allow_duplicatesbool, mặc định saibool, default FalseCho phép các nhãn cột trùng lặp được tạo.
Mới trong phiên bản 1.5.0.
ReturnSseries hoặc dataFrame hoặc không cóKhi thả là sai [mặc định], một DataFrame được trả về. Các cột mới được tạo sẽ xuất hiện đầu tiên trong DataFrame, tiếp theo là các giá trị loạt ban đầu. Khi thả là đúng, một loạt được trả lại. Trong cả hai trường hợp, nếu
li = ['RGB','RBR','RGD']
df = df.loc[li]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
5, không có giá trị nào được trả về.
Ví dụ
>>> s = pd.Series[[1, 2, 3, 4], name='foo', ... index=pd.Index[['a', 'b', 'c', 'd'], name='idx']]
Tạo một DataFrame với chỉ mục mặc định.
>>> s.reset_index[] idx foo 0 a 1 1 b 2 2 c 3 3 d 4
Để chỉ định tên của tên sử dụng cột mới.
>>> s.reset_index[name='values'] idx values 0 a 1 1 b 2 2 c 3 3 d 4
Để tạo một chuỗi mới với bộ bỏ mặc định xuống True.
>>> s.reset_index[drop=True] 0 1 1 2 2 3 3 4 Name: foo, dtype: int64
Để cập nhật loạt bài tại chỗ, mà không tạo ra một bộ mới cho đúng. Lưu ý rằng nó cũng yêu cầu
li = ['RGB','RBR','RGD']
df = df.loc[li]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
6.>>> s.reset_index[inplace=True, drop=True] >>> s 0 1 1 2 2 3 3 4 Name: foo, dtype: int64
Tham số cấp độ thú vị cho chuỗi với chỉ số đa cấp.
>>> arrays = [np.array[['bar', 'bar', 'baz', 'baz']], ... np.array[['one', 'two', 'one', 'two']]] >>> s2 = pd.Series[ ... range[4], name='foo', ... index=pd.MultiIndex.from_arrays[arrays, ... names=['a', 'b']]]
Để loại bỏ một cấp độ cụ thể khỏi chỉ số, mức sử dụng.
>>> s2.reset_index[level='a'] a foo b one bar 0 two bar 1 one baz 2 two baz 3
Nếu mức không được đặt, tất cả các cấp được xóa khỏi chỉ mục.
li = ['RGB','RBR','RGD']
df = df.loc[li]
a b
RGB 11 3
RGB 11 3
RBR 0 1
RBR 0 1
RGD 10 2
RGD 10 2
RGD 10 2
RGD 10 2
0