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

Pandas按主机名分组 将多行列日期数据合并为单行结果

Pandas按主机合并多行补丁日期到单行

原始数据

import pandas as pd
df = pd.DataFrame([
        ['server1', 'NA', 'NA', '2011-03-31'],
        ['server1', '2011-02-22', 'NA', 'NA'],
        ['server1', 'NA', '2011-06-22', 'NA'],
        ['server2', 'NA', 'NA', '2011-12-31'],
        ['server2', 'NA', '2011-02-21', 'NA'],
        ['server3', 'NA', 'NA', '2011-08-29'],
    ], columns=['hostname', 'patch_date1', 'patch_date2', 'patch_date3'])

解决方案

原始数据中的'NA'是字符串类型,需要先转换为Pandas可识别的缺失值,再通过分组聚合提取每个主机的有效补丁日期:

  1. 替换字符串'NA'为Pandas缺失值:
df = df.replace('NA', pd.NA)
  1. 按hostname分组,对每个日期列提取非缺失值(每个主机的单日期列仅存在一个有效数据,first()/max()/min()均可实现):
result_df = df.groupby('hostname', as_index=False).first()
  1. 将缺失值转回字符串'NA',匹配目标格式:
result_df = result_df.fillna('NA')
  1. 格式化输出对齐结果:
for _, row in result_df.iterrows():
    print(f"{row['hostname']} | {row['patch_date1'].ljust(9)} | {row['patch_date2'].ljust(9)} | {row['patch_date3']}")

最终输出

server1 | 2011-02-22 | 2011-06-22 | 2011-03-31
server2 | NA         | 2011-02-21 | 2011-12-31
server3 | NA         | NA         | 2011-08-29

内容的提问来源于stack exchange,提问作者Bandhala Raja Selvam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:45:42