pandas 그룹 정렬에서 두 번째로 큰 데이터를 얻는 방법

Python은 데이터 분석을 하는 데 매우 편리하다. 인터넷에서 데이터 중 두 번째로 큰 방법을 찾는 방법이 많지만 대부분이 SQL에 관한 것이다. 그래서 나는 Python으로 이 일을 하는 것에 도전했다. (주로 SQL이 잘 쓰지 않는다>_<), 코드를 올리는 것이다.

1. 데이터는 내가 직접 작성한 것이다


실제 작업에서 데이터베이스에서 데이터를 가져와야 합니다. 데이터베이스에서 데이터를 어떻게 내보내는지 제가 나중에 보충하겠습니다.

import pandas as pd
df = pd.DataFrame([
    {"class": 1, "name": "aa", "english": 120},
    {"class": 1, "name": "bb", "english": 110},
    {"class": 1, "name": "cc", "english": 110},
    {"class": 1, "name": "dd", "english": 110},
    {"class": 2, "name": "ee", "english": 120},
    {"class": 2, "name": "ff", "english": 140},
    {"class": 2, "name": "gg", "english": 130},
    {"class": 2, "name": "hh", "english": 130},
    {"class": 3, "name": "tt", "english": 130},
    {"class": 4, "name": "xx", "english": 130},
    {"class": 4, "name": "yy", "english": 130},
    {"class": 5, "name": "zz", "english": None},
  ])

2. 두 번째로 큰 데이터를 그룹화


def fun(df):
  # english 
  sort_set = set(df["english"].values.tolist())
  if len(sort_set)<=1:
    #  1, 
    return None
  else:
    #  english 
    sort_value = sorted(sort_set,reverse=True)[1]
    temp_df = df[df["english"]==sort_value]
    return temp_df
 
df = df.groupby(by=["class"]).apply(fun).reset_index(drop=True)
print(df)
결과는 다음과 같습니다.

  class name english
0 1 bb 110.0
1 1 cc 110.0
2 1 dd 110.0
3 2 gg 130.0
4 2 hh 130.0

3. 다 썼어요. 이렇게 간단해요.


물론 이것은 최대, 최소, 3대 등으로 바뀔 수도 있지만...
추가: pandas는 어떤 열의 A로 정렬하고, B와 C 두 열로 그룹을 나누며, 그룹을 선택한 후 A열의 값이 가장 큰 줄을 선택한다
pandas는 어떤 열의 A로 정렬하고, B와 C 두 열로 그룹을 나누며, 그룹을 나누면 A열의 값이 가장 큰 줄을 선택한다

수요


updateTime 열에 따라 역순으로 정렬하고, B와 C 두 열에 따라 그룹을 나누고, 그룹을 나눈 후 마지막 업데이트 시간의 줄을 선택하고, 결과를 새 인덱스로 추가합니다.

코드


import pandas as pd
data = pd.read_csv('test.csv')
df = pd.DataFrame(data)
df = df.sort_values('updateTime', ascending=False).groupby(['B','C']).first().reset_index()
first () 함수는 첫 번째 줄을 선택하는 것을 대표합니다. 여러 줄을 선택하려면head () 함수:head (5) 를 사용하여 첫 번째 줄을 선택할 수 있습니다.

다음 예제:


import pandas as pd 
data = pd.read_csv('test.csv',header = 0)
df = pd.DataFrame(data) 
#  ,  value  , 
df = df.groupby('date', group_keys=False).apply(lambda x: x.sort_values('value', ascending=False)).groupby('date').head(10).reset_index()
sort_를 직접 사용할 수 없습니다.values () 함수를 사용할 때 apply () 함수를 사용합니다.
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기