我在此基礎上計算了一個日期時間列,min_time并且max_time. 所以從該行的當前min_time行中減去前一行max_time并希望保存到另一列中。怎么做?
data = pd.DataFrame()
data['datetime'] = 18-6-22 8:22:22, 18-6-22 8:22:23, 18-6-22 8:22:24, 18-6-22 8:22:25, 18-6-22 8:22:26, 18-6-22 11:22:27
data['min_time'] = 18-6-22 8:22:22, 18-6-22 8:22:23, 18-6-22 8:22:24, 18-6-22 8:22:25, 18-6-22 8:22:26, 18-6-22 11:22:27
data['max_time'] = 18-6-22 8:22:22, 18-6-22 8:22:23, 18-6-22 8:22:24, 18-6-22 8:22:25, 18-6-22 8:22:26, 18-6-22 11:22:27
data['t_diff_time'] = 0, 0, 0, 0, 0, 0 Day 3:00:1
有什么功能可以做到這一點嗎?
預期輸出:

uj5u.com熱心網友回復:
您可以使用sub()和shift()的組合。當然,第一個值將是 null 因為第一個min沒有 previous max。嘗試:
df['diff'] = df['min_time'].sub(df['max_time'].shift(1))
或者,同樣的結果:
df['diff'] = df['min_time'] - df['max_time'].shift(1)
回傳:
datetime min_time max_time diff
0 18-6-22 8:22:22 2022-06-18 08:22:22 2022-06-18 08:22:22 NaT
1 18-6-22 8:22:23 2022-06-18 08:22:23 2022-06-18 08:22:23 0 days 00:00:01
2 18-6-22 8:22:24 2022-06-18 08:22:24 2022-06-18 08:22:24 0 days 00:00:01
3 18-6-22 8:22:25 2022-06-18 08:22:25 2022-06-18 08:22:25 0 days 00:00:01
4 18-6-22 8:22:26 2022-06-18 08:22:26 2022-06-18 08:22:26 0 days 00:00:01
5 18-6-22 11:22:27 2022-06-18 11:22:27 2022-06-18 11:22:27 0 days 03:00:01
或者,考慮添加fillna()以完全匹配您所需的輸出:
data['diff'] = data['min_time'].sub(data['max_time'].shift(1)).fillna(pd.to_timedelta(0))
輸出:
datetime min_time max_time diff
0 18-6-22 8:22:22 2022-06-18 08:22:22 2022-06-18 08:22:22 0 days 00:00:00
1 18-6-22 8:22:23 2022-06-18 08:22:23 2022-06-18 08:22:23 0 days 00:00:01
2 18-6-22 8:22:24 2022-06-18 08:22:24 2022-06-18 08:22:24 0 days 00:00:01
3 18-6-22 8:22:25 2022-06-18 08:22:25 2022-06-18 08:22:25 0 days 00:00:01
4 18-6-22 8:22:26 2022-06-18 08:22:26 2022-06-18 08:22:26 0 days 00:00:01
5 18-6-22 11:22:27 2022-06-18 11:22:27 2022-06-18 11:22:27 0 days 03:00:01
uj5u.com熱心網友回復:
您可以使用shift()函式。你可以這樣做:
shifted_max = data["max_time"].shift(1)
data["t_diff_time"] = data["min_time"] - shifted_max
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532784.html
