python - 在 Pandas 中添加特定格式的新 timedelta 值列

标签 python pandas datetime dataframe date-formatting

我有一个数据框,我想添加一列,其中包含另外两列之间的时间差:

 df[Diff] = df['End Time'] - df['Open Time']
 df[Diff]
 0     0 days 01:25:40
 1     0 days 00:41:57
 2     0 days 00:21:47
 3     0 days 16:41:57
 4     0 days 04:32:00
 5     0 days 03:01:57
 6     0 days 01:37:56
 7     0 days 01:13:57
 8     0 days 01:07:56
 9     0 days 02:33:59
 10   29 days 18:33:53
 11    0 days 03:50:56
 12    0 days 01:57:56

我希望此列的格式为“1h 25m”,因此我尝试以小时为单位计算天数:

diff = df['End Time'] - df['Open Time']
hours = diff.dt.days * 24 + diff.dt.components.hours
minutes = diff.dt.components.minutes

并收到以下结果:

0       1
1       0
2       0
3      16
4       4
5       3
6       1
7       1
8       1
9       2
10    714
11      3
12      1
dtype: int64h 0     25
1     41
2     21
3     41
4     32
5      1
6     37
7     13
8      7
9     33
10    33
11    50
12    57
Name: minutes, dtype: int64m

但我无法在新列中以这种格式表达这些结果:

 '{}h {}m'.format(hours,minutes)) 

最佳答案

您可以提取相关列,使用 astype 转换为 str,然后根据需要连接列。

c = (df['End Time'] - df['Open Time'])\
              .dt.components[['days', 'hours', 'minutes']]
df['diff'] = (c.days * 24 + c.hours).astype(str) + 'h ' + c.minutes.astype(str) + 'm'
df['diff']
0       1h 25m
1       0h 41m
2       0h 21m
3      16h 41m
4       4h 32m
5        3h 1m
6       1h 37m
7       1h 13m
8        1h 7m
9       2h 33m
10    714h 33m
11      3h 50m
12      1h 57m
Name: diff, dtype: object

关于python - 在 Pandas 中添加特定格式的新 timedelta 值列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46364407/

相关文章:

python - 如何使用 python requests 库验证 POST 文件传输?

python - 像下面这样的字符串操作是否在 python 中使用了额外的空间?

python - 按二维数组中的特定行标识符对列求和

带有 IntEnum 的 pandas value_counts() 引发 RecursionError

java - 日历无法正确设置小时

python - 如何扩展 Django Group 模型?

python - 创建一个新列,该新列是满足两个条件的多个其他列中的日期数之和

python-3.x - 如何在Python中分离不一致的列?

python - 具有正确的时区和正确的日期时间

Python用strptime解析日期