我想在我的資料集中添加一個與時間戳相對應的列,并按步驟計算一天。也就是說,一年應該有 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 重新開始。
如何解決此問題以使其提供全年的步數?
uj5u.com熱心網友回復:
GroupBy.transform與firstor Series 一起使用min,減去 column time,將 timedeltas 轉換為 days 并添加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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435940.html
