기본적으로 pandas groupby가 정렬됩니다. 하지만 정렬 순서를 변경하고 싶습니다. 어떻게해야합니까?pandas groupby 내림차순 정렬
반환 된 groupby 개체에 정렬 메서드를 적용 할 수 없다고 생각합니다.
기본적으로 pandas groupby가 정렬됩니다. 하지만 정렬 순서를 변경하고 싶습니다. 어떻게해야합니까?pandas groupby 내림차순 정렬
반환 된 groupby 개체에 정렬 메서드를 적용 할 수 없다고 생각합니다.
팬더 0.18에서이 작업을 수행하는 한 가지 방법은 그룹화 된 데이터의 sort_index
메서드를 사용하는 것입니다. 당신이 볼 수 있듯이
np.random.seed(1)
n=10
df = pd.DataFrame({'mygroups' : np.random.choice(['dogs','cats','cows','chickens'], size=n),
'data' : np.random.randint(1000, size=n)})
grouped = df.groupby('mygroups', sort=False).sum()
grouped.sort_index(ascending=False)
print grouped
data
mygroups
dogs 1831
chickens 1446
cats 933
에서, GROUPBY 열이 지금 상승되는 기본의 indstead 내림차순으로 정렬됩니다 :
다음은 예입니다.
잘 작동하는 것처럼 보입니다 (Pandas 0.17.1). 문서화되지 않은 기능이므로 매우 만족스럽지 않습니다. [documentation은] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html)'groupby'는 keys * 내에서 그룹의 순서를 유지하지만 아무 것도 말하지 않는다고 말합니다 그룹 키의 정렬/정렬되지 않은 키. 내가 맞습니까? – Geeklhem
좋은 지적 ... 많은 것이 2 년 후에 변했고, 나는 대답을 업데이트 할 것이다 –
groupby를 수행하고 reset_index()를 사용하여 DataFrame으로 되돌립니다. 그럼 정렬. 내림차순으로 순서 나 종류를 보존
grouped = df.groupby('mygroups').sum().reset_index()
grouped.sort_values('mygroups', ascending=False)
이것은 나에게 잘 맞았다. –
다른 예 : 당신이 GROUPBY을하기 전에
In [97]: import pandas as pd
In [98]: df = pd.DataFrame({'name':['A','B','C','A','B','C','A','B','C'],'Year':[2003,2002,2001,2003,2002,2001,2003,2002,2001]})
#### Default groupby operation:
In [99]: for each in df.groupby(["Year"]): print each
(2001, Year name
2 2001 C
5 2001 C
8 2001 C)
(2002, Year name
1 2002 B
4 2002 B
7 2002 B)
(2003, Year name
0 2003 A
3 2003 A
6 2003 A)
### order preserved:
In [100]: for each in df.groupby(["Year"], sort=False): print each
(2003, Year name
0 2003 A
3 2003 A
6 2003 A)
(2002, Year name
1 2002 B
4 2002 B
7 2002 B)
(2001, Year name
2 2001 C
5 2001 C
8 2001 C)
In [106]: df.groupby(["Year"], sort=False).apply(lambda x: x.sort_values(["Year"]))
Out[106]:
Year name
Year
2003 0 2003 A
3 2003 A
6 2003 A
2002 1 2002 B
4 2002 B
7 2002 B
2001 2 2001 C
5 2001 C
8 2001 C
In [107]: df.groupby(["Year"], sort=False).apply(lambda x: x.sort_values(["Year"])).reset_index(drop=True)
Out[107]:
Year name
0 2003 A
1 2003 A
2 2003 A
3 2002 B
4 2002 B
5 2002 B
6 2001 C
7 2001 C
8 2001 C
당신은 dataframe에 sort_values()
할 수 있습니다. 팬더는 groupby에서 주문을 보존합니다.
In [44]: d.head(10)
Out[44]:
name transcript exon
0 ENST00000456328 2 1
1 ENST00000450305 2 1
2 ENST00000450305 2 2
3 ENST00000450305 2 3
4 ENST00000456328 2 2
5 ENST00000450305 2 4
6 ENST00000450305 2 5
7 ENST00000456328 2 3
8 ENST00000450305 2 6
9 ENST00000488147 1 11
for _, a in d.head(10).sort_values(["transcript", "exon"]).groupby(["name", "transcript"]): print(a)
name transcript exon
1 ENST00000450305 2 1
2 ENST00000450305 2 2
3 ENST00000450305 2 3
5 ENST00000450305 2 4
6 ENST00000450305 2 5
8 ENST00000450305 2 6
name transcript exon
0 ENST00000456328 2 1
4 ENST00000456328 2 2
7 ENST00000456328 2 3
name transcript exon
9 ENST00000488147 1 11
충분히 명확하지 않습니다. 예를 들어, 예상 된 결과가 없습니다, 당신이 한 일이 없습니다. 당신이 정말로 묻고있는 것을 알 수있는 방법이 없습니다. – acushner
반환 된 객체를 데이터 프레임으로 변환하여 정렬 할 수 있습니다. – szeitlin