에서 하위 그룹의 순서를 가져 오기 :내가 이렇게 생긴 팬더 dataframe이 팬더 dataframe
df = pd.DataFrame({'Name' : ['Kate', 'John', 'Peter','Kate', 'John', 'Peter'],'Distance' : [23,16,32,15,31,26], 'Time' : [3,5,2,7,9,4]})
df
Distance Name Time
0 23 Kate 3
1 16 John 5
2 32 Peter 2
3 15 Kate 7
4 31 John 9
5 26 Peter 2
내가 각각의 이름에 대해 알려줍니다 열을 추가 할을, 시간의 순서거야.
나는 이런 식으로 뭔가 싶어 :
Order Distance Name Time
0 16 John 5
1 31 John 9
0 23 Kate 3
1 15 Kate 7
0 32 Peter 2
1 26 Peter 4
내가 그것을 루프를 사용하여 수행 할 수 있습니다 (떨어져 매우 unpythonic되는 것을)
이 작동df2 = df[df['Name'] == 'aaa'].reset_index().reset_index() # I did this just to create an empty data frame with the columns I want
for name, row in df.groupby('Name').count().iterrows():
table = df[df['Name'] == name].sort_values('Time').reset_index().reset_index()
to_concat = [df2,table]
df2 = pd.concat(to_concat)
df2.drop('index', axis = 1, inplace = True)
df2.columns = ['Order', 'Distance', 'Name', 'Time']
df2
, 문제가 큰 테이블을 (내 실제 테이블에는 약 50,000 개의 행이 있음) 실행하는 데 약 30 분이 걸립니다.
누가 더 빨리 달리는 간단한 방법으로이 글을 쓸 수 있습니까? 어딘가에 답을 얻은 것이 유감이지만 검색 방법을 알지 못했습니다.
보다도, 난이이 작업을 수행하는 가장 우아한 방법입니다 확실하지 않다
어떤 이유로이 작업은 효과가 없습니다. 일부 그룹의 이름에 대해서는 "주문"이 중간에 다시 시작됩니다. 예를 들어 같은 이름의 행에 대해서는 0,1,2,0,1과 같은 명령이 있습니다. jezrael의 답변은 작동합니다. – user5576