熊猫应用列的系列顺序

时间:2019-07-03 23:38:01

标签: python pandas

要聚合并每秒查找值,我正在Python中使用pandas进行以下操作,但是,记录到文件中的输出未按它们在此处显示的方式显示列。以某种方式对这些列名称进行排序,因此在UpdateTotal和UpdatesSec之前显示TotalDMLsSec。

    'DeletesTotal': x['Delete'].sum(),
    'DeletesSec': x['Delete'].sum()/VSeconds,
    'SelectsTotal': x['Select'].sum(),
    'SelectsSec': x['Select'].sum()/VSeconds,
    'UpdateTotal': x['Update'].sum(),
    'UpdatesSec': x['Update'].sum()/VSeconds,
    'InsertsTotal': x['Insert'].sum(),
    'InsertsSec': x['Insert'].sum()/VSeconds,
    'TotalDMLsSec':(x['Delete'].sum()+x['Update'].sum()+x['Insert'].sum())/VSeconds
    })
)
df.to_csv(/home/summary.log,sep='\t', encoding='utf-8-sig')

除上述问题外,还有其他几个问题-

  1. 尽管以csv格式记录日志,但所有值/列都显示在excel的一列中,是否可以正确加载CSV数据
  2. 在写入csv文件时,默认情况下可以基于一列对行进行排序吗(比如说InsertsSec)?

这里的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

假设您的DataFrame是这样的:

      Deletes  Selects  Updates  Inserts
Name                                    
Xxx        20       10       40       50
Yyy        12       32       24       11
Zzz        70       20       30       20

然后总计每秒总计都可以计算为:

total = df.sum().rename('Total')
VSeconds = 5   # I assumed some value
tps = (total / VSeconds).rename('Total per sec')

然后,您可以将以上两行添加到DataFrame中:

df = df.append(totals).append(tps)

缺点是所有数字都转换为 float 。 但是在 Pandat 中没有其他方法,因为每一列都必须有 值一个类型。

然后您可以例如将其写入CSV文件(包括总数)。

答案 1 :(得分:0)

这就是我的努力

    df.to_excel(vExcelFile,'All')
    vSortedDF=df.sort_values(['Deletes%'],ascending=False)
    vSortedDF.loc[vSortedDF['Deletes%']> 5, ['DeletesTotal','DeletesSec','Deletes%']].to_excel(vExcelFile,'Top Delete objects')
vExcelFile.save()

对于CSV,使用,而不是使用单独的\ t,效果很好。 df.to_csv(/home/summary.log,sep='\t', encoding='utf-8-sig')