如何在Pandas DataFrame中筛选时间计数一致的MarketName组
Pandas处理MarketName数据过滤方案
步骤分解
- 按
MarketName分组,提取每组的最早和最晚Date/Time - 对每个分组,分别统计最早时间、最晚时间对应的行数
- 筛选出最早时间行数与最晚时间行数相等的
MarketName - 保留这些符合条件的
MarketName的所有行
代码实现
import pandas as pd # 先把Date/Time列转为datetime类型(如果原本不是的话) df['Date/Time'] = pd.to_datetime(df['Date/Time']) # 定义函数,统计每组最早、最晚时间的行数 def check_time_counts(group): min_time = group['Date/Time'].min() max_time = group['Date/Time'].max() count_min = len(group[group['Date/Time'] == min_time]) count_max = len(group[group['Date/Time'] == max_time]) return pd.Series([count_min, count_max], index=['count_min', 'count_max']) # 按MarketName分组计算行数 market_counts = df.groupby('MarketName').apply(check_time_counts) # 筛选出符合条件的MarketName valid_markets = market_counts[market_counts['count_min'] == market_counts['count_max']].index # 过滤得到最终结果 filtered_df = df[df['MarketName'].isin(valid_markets)]
补充说明
- 如果你的
Date/Time列原本就是datetime格式,可以跳过第一步的类型转换 - 替换代码里的
df为你实际使用的DataFrame变量名 - 可以先执行
print(market_counts)查看每个MarketName的行数统计结果,验证逻辑是否符合预期
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

