根据时间戳值创建一个新列以按步骤计算天数

Create a new column based on timestamp values to count the days by steps

我想在我的数据集中添加一个与时间戳对应的列,并按步骤计算日期。也就是说,一年应该有 365 个“步骤”,我希望第 1 天每个帐户的所有分组付款都在此列中标记为 1,然后第 2 天的所有付款都标记为 2,依此类推直到一天365. 我希望它看起来像这样:

  account        time  steps
0       A  2022.01.01    1 
1       A  2022.01.02    2
2       A  2022.01.02    2
3       B  2022.01.01    1
4       B  2022.01.03    3
5       B  2022.01.05    5

我试过这个:

def day_step(x):
x['steps'] = x.time.dt.day.shift()
return x


df = df.groupby('account').apply(day_step)

但是,它只计算每个月,一旦新月开始,它又从 1 开始。

如何解决这个问题,让它提供全年的步数?

GroupBy.transformfirstmin 系列一起使用,减去列 time,将时间增量转换为天数并添加 1:

df['time'] = pd.to_datetime(df['time'])

df['steps1'] = (df['time'].sub(df.groupby('account')['time'].transform('first'))
                          .dt.days
                          .add(1)
print (df)
  account       time  steps  steps1
0       A 2022-01-01      1       1
1       A 2022-01-02      2       2
2       A 2022-01-02      2       2
3       B 2022-01-01      1       1
4       B 2022-01-03      3       3
5       B 2022-01-05      5       5

第一个想法,仅当第一行是 January 1:

时才有效
df['steps'] = df['time'].dt.dayofyear