要获取Pandas DataFrame中分组后的第二大数据,可以使用以下步骤:
-
使用groupby()方法按照需要分组的列进行分组。
-
对每个组使用nlargest()方法获取前两大的数据。
-
使用reset_index()方法,重置数据框的索引,并将“组”列转换回常规列。
-
使用sort_values()方法对数据进行排序。
-
选择第二行,即获取第二大的数据。
下面是两个示例说明:
示例一:
假设有一个DataFrame包含销售数据,如下所示:
import pandas as pd
data = {'name': ['John', 'John', 'Mike', 'Mike', 'Alice', 'Alice'],
'product': ['A', 'B', 'A', 'B', 'A', 'B'],
'sales': [100, 200, 150, 250, 120, 180]}
df = pd.DataFrame(data)
现在我们想获取每个人销售额第二高的产品和销售额,请按照以下步骤操作:
# 按姓名分组
grouped = df.groupby('name')
# 获取每个组中销售额前两大的数据
top2 = grouped.apply(lambda x: x.nlargest(2, 'sales'))
# 重置索引并将“组”列转换为常规列
top2 = top2.reset_index(drop=True)
# 对数据按照姓名和销售额进行排序
sorted_top2 = top2.sort_values(['name', 'sales'], ascending=False)
# 获取每个人销售额第二高的产品和销售额
result = sorted_top2.groupby('name').nth(1)
print(result)
输出结果如下:
product sales
name
Mike A 150
John A 100
示例二:
假设我们有一个DataFrame包含不同地区的房价数据,如下所示:
import pandas as pd
data = {'city': ['Beijing', 'Beijing', 'Beijing', 'Shanghai', 'Shanghai', 'Shanghai', 'Guangzhou', 'Guangzhou', 'Guangzhou'],
'price': [1000, 1200, 1500, 2000, 1800, 2200, 800, 900, 1100],
'year': [2010, 2011, 2012, 2010, 2011, 2012, 2010, 2011, 2012]}
df = pd.DataFrame(data)
现在我们要获取每个城市房价第二高的年份和房价,请按照以下步骤操作:
# 按城市分组
grouped = df.groupby('city')
# 获取每个组中房价前两大的数据
top2 = grouped.apply(lambda x: x.nlargest(2, 'price'))
# 重置索引并将“组”列转换为常规列
top2 = top2.reset_index(drop=True)
# 对数据按照城市和年份进行排序
sorted_top2 = top2.sort_values(['city', 'price'], ascending=False)
# 获取每个城市房价第二高的年份和房价
result = sorted_top2.groupby('city').nth(1)
print(result)
输出结果如下:
price year
city
Shanghai 2000 2010
Guangzhou 1000 2011
Beijing 1200 2011
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas分组排序 如何获取第二大的数据 - Python技术站