Skip to main content
 首页 » 编程设计

python之按月查找每组中最早的记录

2025年05月04日10soundcode

我有一个像这样的 Pandas 数据框:

Month  Name  Revenue   EARLY_MIN 
Jan     A     100        ? 
Jan     A      50        ? 
Feb     A      30        ? 

对于每个“姓名”,我想选择最早的记录(一月)。如果它返回多行,我将选择最小值的记录。收入。所以在这种情况下是 50。我将为该记录创建一列 EARLY_MIN=1。因此,在此示例中,第二行的 EARLY_MIN=1,其他行的 EARLY_MIN=0。

我怎样才能在 pandas 中做到这一点?步数?

请您参考如下方法:

使用 python 的 calendar 标准库,您可以将“月”转换为数值。这使我们可以轻松地根据“月份”值对行进行排序。

import calendar 
 
mapping = {calendar.month_abbr[k]: k for k in range(1, 13)} 
u = df.assign(Month=df.Month.map(mapping)) 
u 
 
   Month Name  Revenue EARLY_MIN 
0      1    A      100         ? 
1      1    A       50         ? 
2      2    A       30         ? 

现在,您可以使用 groupby 和 idxmin 或类似的东西。

idx = (u['Revenue'].mask(u.groupby('Name').Month.transform('min') != u['Month']) 
                   .groupby(u.Name) 
                   .idxmin() 
                   .values) 
df.loc[idx, 'EARLY_MIN'] = 1 
df 
 
  Month Name  Revenue EARLY_MIN 
0   Jan    A      100         ? 
1   Jan    A       50         1 
2   Feb    A       30         ?