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、寫完啦,就這麼簡單,當然這還可以改爲取最大、取最小、取第三大、等等......
有需要的小夥伴可以自行更改,或者評論留言我來幫你改,喜歡的話給個關注唄!