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、寫完啦,就這么簡單
當然這還可以改為取最大、取最小、取第三大、等等......
補充: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() 函數。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- Pandas中DataFrame的分組/分割/合并的實現
- pandas 實現分組后取第N行
- pandas group分組與agg聚合的實例
- pandas groupby分組對象的組內排序解決方案
- pandas組內排序,并在每個分組內按序打上序號的操作
- pandas 實現某一列分組,其他列合并成list