python - 按列计算时差 Pandas

标签 python pandas datetime dataframe

我有列df['Status'],其中包含一些对象:

在:df.Status.unique() 输出:数组([nan, 'Open', 'Plmt', 'SHRT', 'Check'], dtype=object)

栏目:

在:df['状态'] 输出:时间状态 2016-01-15 08:55:00 开放 2016-01-15 09:00:00 计划 2016-01-15 09:05:00 计划 2016-01-15 09:10:00 计划 2016-01-15 09:15:00 计划 2016-01-15 09:20:00 计划 2016-01-15 09:25:00 计划 2016-01-15 09:30:00 计划 2016-01-15 09:35:00 计划 2016-01-15 09:40:00 SHRT

其中时间是:

df.index = df['时间'] df.index = pd.to_datetime(df.index)

我想跳过我不需要的值('Plmt'、'Check'、'nan'),创建新列 df['Diff'],其中 'Open' 之间的分钟数差异SHRT'

我正在尝试这样:

df['状态'][df['状态'] == 'SHRT'] - df['状态'][df['状态'] == '打开']

但在输出中接收 NaN 值:

时间 2016-01-15 08:55:00 南 2016-01-15 09:40:00 南 2016-01-18 08:30:00 南 2016-01-19 14:30:00 南 2016-01-19 14:35:00 南 2016-01-20 11:10:00 南 2016-01-20 11:45:00 南

预期的输出必须如下所示: 时间状态差异 2016-01-15 08:55:00 打开 NaN 2016-01-15 09:40:00 短时间 00:45:00 2016-02-15 10:00:00 打开 NaN 2016-02-15 14:15:00 SHRT 02:15:00

如何获得时间差,有人可以帮忙吗?

最佳答案

用途:

#changed data samples for better sample data 
print (df)
                 time Status
0 2016-01-15 08:55:00   Open
1 2016-01-15 09:00:00   Plmt
2 2016-01-15 09:05:00   SHRT
3 2016-01-15 09:10:00   Plmt
4 2016-01-15 09:15:00   Open
5 2016-01-15 09:20:00   Plmt
6 2016-01-15 09:25:00   SHRT
7 2016-01-15 09:30:00   SHRT
8 2016-01-15 09:35:00   Plmt
9 2016-01-15 09:40:00   SHRT
<小时/>
#filter only Open and SHRT
df1 = df[df['Status'].isin(['Open','SHRT'])].copy()
#convert column to datetimes
df1['time'] = pd.to_datetime(df1['time'])
print (df1)
                 time Status
0 2016-01-15 08:55:00   Open
2 2016-01-15 09:05:00   SHRT
4 2016-01-15 09:15:00   Open
6 2016-01-15 09:25:00   SHRT
7 2016-01-15 09:30:00   SHRT
9 2016-01-15 09:40:00   SHRT

#filter only rows with Open and next row SHRT
m1 = (df1['Status'] == 'Open') & (df1['Status'].shift(-1) == 'SHRT')
m2 = (df1['Status'].shift() == 'Open') & (df1['Status'] == 'SHRT')
df2 = df1[m1 | m2].copy()

#create difference column and set NaT by condition
df2['Diff'] = df2['time'].diff().mask(df2['Status'] == 'Open') 
print (df2)
                 time Status     Diff
0 2016-01-15 08:55:00   Open      NaT
2 2016-01-15 09:05:00   SHRT 00:10:00
4 2016-01-15 09:15:00   Open      NaT
6 2016-01-15 09:25:00   SHRT 00:10:00

关于python - 按列计算时差 Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001770/

相关文章:

python - 在 matplotlib 中以编程方式绘制重叠偏移图

python - 如何自定义python DataFrame散点图颜色?

python - 无法使用lxml获取连接到特定标签的html元素

pandas - 将字典值替换为数据框

python - 如何将不同列大小的 pandas 数据框拆分为单独的数据框?

java - 简单日期格式 ("yyyy-MM-dd' T'HH :mm:ssZ") parse in java gives wrong date?

PHP strtotime 和 JavaScript Date.parse 返回不同的时间戳

python - 如何计算python中每行具有值的列数?

python - 解码 CSV 文件中的 UTF8 文字

mysql - 选择date_add mysql问题