假设,我在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]]
上述代码的目的是首先groupby
原始数据在campaignname
列上,然后在每个结果组中,我希望再次按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数据框中选择排序组中的第一行,我将非常感激。提前感谢您的回答/建议!
你可以这样做:
或:
我更喜欢的方法是使用
idxmax
。它返回最大值的索引。我随后使用该索引对df
进行切片相关问题 更多 >
编程相关推荐