You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按条件拆分pandas DataFrame为含3个不同升序time_Utc的子表

实现方法

你之前的写法是全局随机抽取3行,没有对time_Utc的唯一性做约束,自然会抽到同日期的行。可以按「先处理日期格式→提取排序后的唯一日期→按每3个日期为一组筛选原表」的逻辑实现,步骤如下:

  • 首先将time_Utc字段转为标准日期类型,避免字符串排序出错
  • 提取所有去重后的日期值,按时间从小到大排序
  • 以3个日期为步长切分排序后的日期列表,每一组日期对应筛选原表的行,即为符合要求的子DataFrame

完整顺序拆分代码

import pandas as pd

# 构造原始DataFrame
df = {'Source': ['-23456','-23456','3456','','56789','-12456','-13245','','45678','12346','','-23456','-23456','-234556','124566','098745','-67890'],
      'number_mp': [369452]*17,
      'time_Utc': ["2014-9-12","2014-9-12","2014-9-12" ,"2017-5-14","2017-5-14","2017-5-14","2016-10-26" ,"2016-10-26" ,"2016-10-26" ,"2016-11-3" ,"2016-11-3" ,"2016-8-10" ,"2016-8-10","2016-8-10","2014-9-12","2014-9-12","2014-9-12"]}
df = pd.DataFrame(df)

# 转换日期格式
df['time_Utc'] = pd.to_datetime(df['time_Utc'])

# 获取从小到大排序的唯一日期列表
unique_sorted_dates = sorted(df['time_Utc'].unique())

res = []
# 按步长3切分日期组
for i in range(0, len(unique_sorted_dates), 3):
    date_group = unique_sorted_dates[i:i+3]
    # 如果要求每组必须凑够3个不同日期,保留下面两行;要保留不足3个的尾组就删掉这两行
    if len(date_group) < 3:
        break
    # 筛选对应日期的行生成子表
    sub_df = df[df['time_Utc'].isin(date_group)].reset_index(drop=True)
    res.append(sub_df)

随机组合3个日期的版本

如果你需要的是随机生成多组「包含3个不同日期」的子表,而不是按固定顺序切分,可以用下面的写法,避免重复抽到同一组日期:

import random

res = []
used_group = set()
# 括号里填你需要生成的子表总数,注意不要超过所有日期能组成的不重复3元组总数
for _ in range(3):
    while True:
        # 随机抽3个不重复日期并排序
        current_group = tuple(sorted(random.sample(list(unique_sorted_dates), 3)))
        if current_group not in used_group:
            used_group.add(current_group)
            break
    sub_df = df[df['time_Utc'].isin(current_group)].reset_index(drop=True)
    res.append(sub_df)

结果说明

你提供的样例数据里去重后共5个日期,从小到大依次是2014-09-12、2016-08-10、2016-10-26、2016-11-03、2017-05-14。按顺序切分的话,第一组包含前3个日期的所有行,剩余2个日期不足3个,开启凑够3个的判断时只会返回1个子表。


内容的提问来源于stack exchange,提问作者Johana Murcia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:27:21