如何根据每行频次最高的AM/PM值替换整行所有时间的后缀?
Pandas行级统一替换时间后缀实现方案
核心思路
你已经正确获取到了每行的最高频次后缀,接下来只需要逐行提取所有时间的数字部分,拼接上对应行的最高频次后缀即可。
完整实现代码
import pandas as pd # 构造示例数据(实际使用时可替换为你自己的DataFrame) df = pd.DataFrame({ 'a': ['2 PM', '2 PM', '10 AM', '8 AM'], 'b': ['6 PM', '1 PM', '2 AM', '9 AM'], 'c': ['4 PM', '10 PM', '9 AM', '10 AM'], 'd': ['5 AM', '12 AM', '2 PM', '11 AM'] }) # 指定要处理的列 process_cols = ['a', 'b', 'c', 'd'] # 1. 计算每行最高频次的后缀 row_max_suffix = df[process_cols].applymap(lambda x: x.split()[1]).mode(axis=1)[0] # 2. 逐行替换所有时间的后缀 df[process_cols] = df[process_cols].apply( lambda row: row.str.split().str[0] + ' ' + row_max_suffix[row.name], axis=1 ) # 输出结果 print(df)
关键逻辑说明
row.str.split().str[0]:拆分当前行的所有时间字符串,提取数字部分,丢弃原有后缀row_max_suffix[row.name]:通过行索引row.name匹配到当前行对应的最高频次后缀,和数字部分拼接完成替换
运行上述代码后输出结果和预期完全一致:
a b c d 0 2 PM 6 PM 4 PM 5 PM 1 2 PM 1 PM 10 PM 12 PM 2 10 AM 2 AM 9 AM 2 AM 3 8 AM 9 AM 10 AM 11 AM
内容的提问来源于stack exchange,提问作者theodosis
相关产品推荐
相关产品推荐

