【发布时间】:2017-06-30 01:53:40
【问题描述】:
假设,我在 pandas 中有一个如下所示的数据框:
campaignname category_type amount
A cat_A_0 2.0
A cat_A_1 1.0
A cat_A_2 3.0
A cat_A_2 3.0
A cat_A_2 4.0
B cat_B_0 3.0
C cat_C_0 1.0
C cat_C_1 2.0
我正在使用以下代码将上述数据框(例如分配了变量名df)按不同的列分组,如下所示:
for name, gp in df.groupby('campaignname'):
sorted_gp = gp.groupby(['campaignname', 'category_type']).sum().sort_values(['amount'], ascending=False)
# I'd like to know how to select this in a cleaner/more concise way
first_row = [sorted_gp.iloc[0].name[0], sorted_gp.iloc[0].name[1], sorted_gp.iloc[0].values.tolist()[0]]
上述代码的目的是首先groupbycampaignname 列上的原始数据,然后在每个结果组中,我想再次按campaignname 和category_type 进行分组,并且最后,按amount 列排序以选择出现的第一行(每组中amount 最高的行。特别是对于上面的示例,我想得到这样的结果:
first_row = ['A', 'cat_A_2', 4.0] # for the first group
first_row = ['B', 'cat_B_0', 3.0] # for the second group
first_row = ['C', 'cat_C_1', 2.0] # for the third group
等等
如您所见,我正在使用一种相当(在我看来)“丑陋”的方式来检索每个排序组的第一行,但是由于我是 pandas 的新手,所以我不知道更好/更清洁的方法来实现这一点。如果有人可以让我知道一种从熊猫数据框中选择排序组中第一行的方法,我将不胜感激。提前感谢您的回答/建议!
【问题讨论】:
标签: python pandas numpy dataframe group-by