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、写完啦,就这么简单,当然这还可以改为取最大、取最小、取第三大、等等......
有需要的小伙伴可以自行更改,或者评论留言我来帮你改,喜欢的话给个关注呗!
更多好玩的内容,欢迎关注微信公众号“数据与编程之美”