我有一个像这样的 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 ?
关于python - 按月查找每组中最早的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54466833/