데이터 프레임 정렬 후 인덱스 업데이트


102

다음 데이터 프레임을 사용하십시오.

x = np.tile(np.arange(3),3)
y = np.repeat(np.arange(3),3)
df = pd.DataFrame({"x": x, "y": y})
   x  y
0  0  0
1  1  0
2  2  0
3  0  1
4  1  1
5  2  1
6  0  2
7  1  2
8  2  2

x첫 번째 로 정렬하고 두 번째 로 정렬해야합니다 y.

df2 = df.sort(["x", "y"])
   x  y
0  0  0
3  0  1
6  0  2
1  1  0
4  1  1
7  1  2
2  2  0
5  2  1
8  2  2

다시 오름차순으로 인덱스를 변경하려면 어떻게해야합니까? 즉, 어떻게 얻을 수 있습니까?

   x  y
0  0  0
1  0  1
2  0  2
3  1  0
4  1  1
5  1  2
6  2  0
7  2  1
8  2  2

나는 다음을 시도했다. 불행히도 색인을 전혀 변경하지 않습니다.

df2.reindex(np.arange(len(df2.index)))

1
새 df가 필요하지 않은 경우 시도해보십시오df.sort(["x", "y"], ignore_index=True, inplace=True)
InnocentBystander

답변:


176

를 사용하여 인덱스를 재설정 하여 reset_index0, 1, 2, ..., n-1의 기본 인덱스를 되 찾을 수 있습니다 (그리고 drop=True데이터 프레임에 추가 열로 추가하는 대신 기존 인덱스를 삭제하려는 것을 나타내는 데 사용 ). :

In [19]: df2 = df2.reset_index(drop=True)

In [20]: df2
Out[20]:
   x  y
0  0  0
1  0  1
2  0  2
3  1  0
4  1  1
5  1  2
6  2  0
7  2  1
8  2  2

정말 도움이되었습니다. exp_data = exp_data.reindex ([ 'year'], axis = 'columns')는 이전 색인을 유지했습니다. Drop은 이전 인덱스를 제거합니다.
Golden Lion


12

Pandas 1.0.0 df.sort_values에는 ignore_index필요한 작업을 정확히 수행 하는 새 매개 변수 가 있습니다.

In [1]: df2 = df.sort_values(by=['x','y'],ignore_index=True)

In [2]: df2
Out[2]:
   x  y
0  0  0
1  0  1
2  0  2
3  1  0
4  1  1
5  1  2
6  2  0
7  2  1
8  2  2

나는 이것이 버전 1.0.0에서 새로운 것이라고 생각합니다.
zyy

5

다음을 사용하여 새 인덱스를 설정할 수 있습니다 set_index.

df2.set_index(np.arange(len(df2.index)))

산출:

   x  y
0  0  0
1  0  1
2  0  2
3  1  0
4  1  1
5  1  2
6  2  0
7  2  1
8  2  2

8
이것은 불필요합니다. reset_index()대신 사용하십시오
smci 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.