python - 如何根据日期时间差异拆分数据框?
问题描述
假设我有这个数据框,其日期时间由未知的时间间隔分隔:
data[0]:
mintime check
1375 2020-02-18 12:17:51.275000064+00:00 GO1
1376 2020-02-18 12:17:56.484999936+00:00 GO1
1377 2020-02-18 12:18:06.020000+00:00 GO1
1378 2020-02-18 12:18:10.922000128+00:00 NOGO
1379 2020-02-18 14:47:48.353999872+00:00 GO2
1380 2020-02-18 14:47:48.768000+00:00 GO2
1381 2020-02-18 14:48:03.120000+00:00 GO2
我正在尝试拆分数据框。也就是说,如果日期时间间隔不超过 15 秒,它们将被分组到一个新的数据帧中。
我的尝试是从 column 开始的check
。该列显示其行上的值和后面的值是在 15 秒内 (GO) 还是超过 15 秒 (NOGO) 分开。
我在 GO 之后添加数字的原因是为了能够区分 GO 组。这是我的尝试代码:
databds = []
intervalo = pd.Timedelta(seconds = 15)
p = 0
for x in range(0,len(data)):
for y in range(0,len(data[x])-1):
t = pd.to_datetime(data[x]['mintime'][y][0:19])
tp1 = pd.to_datetime(data[x]['mintime'][y+1][0:19])
resta = tp1 - t
if resta > intervalo:
data[x]['check'][y] = "NOGO"
p = p + 1
else:
data[x]['check'][y] = "{}{}".format("GO", p)
for z in range(0,p):
datito = data[x].loc[data[x]['check'] == "{}{}".format("GO", z)]
databds.append(datito)
这个过程很长,而且对资源的要求很高。我相信必须有一种更简单的方法来做到这一点。我尝试过应用 pandas resample 但没有运气。
解决方案
更新答案:
通过将
mintime
列转换为日期时间pd.to_datetime
。以秒为单位评估差异/用 0 填充 NAN 值并检查差异是否大于 15 秒。取
cumsum
结果并使用groupby
.
df.mintime = pd.to_datetime(df.mintime)
df_list = [g for k,g in df.groupby((~(df.mintime.diff().dt.total_seconds().fillna(0) < 15)).cumsum())]
输出:
[ mintime check
1375 2020-02-18 12:17:51.275000064+00:00 GO1
1376 2020-02-18 12:17:56.484999936+00:00 GO1
1377 2020-02-18 12:18:06.020000+00:00 GO1
1378 2020-02-18 12:18:10.922000128+00:00 NOGO,
mintime check
1379 2020-02-18 14:47:48.353999872+00:00 GO2
1380 2020-02-18 14:47:48.768000+00:00 GO2
1381 2020-02-18 14:48:03.120000+00:00 GO2]
推荐阅读
- python - 有人可以解释我是如何使这段代码工作的吗?
- r - 在两个模式之间替换多次出现的文本
- django - 在 GCBV 的 django ListView 中访问外键值
- react-native - 将 react-native-config 与 fastlane 一起使用
- php - 使用 min() 获取包含最小值的数组
- python - Oauth1.0:如何在 python 中不使用访问令牌和令牌秘密生成 HMAC-SHA1 Oauth_signature?
- reactjs - 当 React 应用程序投入生产时,用户可以更改状态吗?
- macos - 在 Visual Studio 2017 for Mac 中安装后更改语言?
- javascript - Object.assign 没有赋值给变量的时候是什么操作?
- angular - 单个列搜索(文本输入)数据表角度 5