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



我想在数据集中添加一列,该列对应于时间戳,并按步骤计算日期。也就是说,一年应该有365";步骤";我希望第一天每个账户的所有分组付款在此列中标记为1,然后第二天的所有付款标记为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

最新更新