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、寫完啦,就這麼簡單,當然這還可以改爲取最大、取最小、取第三大、等等......

有需要的小夥伴可以自行更改,或者評論留言我來幫你改,喜歡的話給個關注唄!

發佈了21 篇原創文章 · 獲贊 4 · 訪問量 2660
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章