python分组求和_利用pandas进行分组求和

《利用Python进行数据分析》这本书举的例子没有使用场景,本文以top命令的输出作为示例,演示pandas的分组和sum计算。

目标:

按时间戳和用户名对top命令中的%MEM、%CPU数据进行汇总(top命令输出入下):

前置条件:

周期执行top命令的输出已经保存到sqlite3数据库中,表结果如下:

stamp INT, account varchar(25), mem_p real, cpu_p real

说明:stamp为执行top命令时的时间戳,用time.time()获取该值

示例:

以下代码涉及pandas获取数据及groupby:

import sqlite3

import pandas as pd

'''主程序:连接数据库,调用sum函数'''

if __name__ == "__main__":

conn = sqlite3.connect('./resource_db', check_same_thread=False)

sum(conn)

'''sum函数:获取数据、分组、sum计算'''

def sum(conn):

start_stamp = 1479265500

sql = 'select stamp, account, mem_p, cpu_p from t_resource where stamp < ' + str(start_stamp)

'''加载数据到pandas的DataFrame'''

my_df = pd.read_sql_query(sql, conn)

'''按一个条件进行分组'''

my_grouped = my_df.groupby(my_df['stamp'])['mem_p', 'cpu_p']

'''对分组执行sum操作'''

sum_result_1 = my_grouped.sum().reset_index()

'''遍历计算结果,输出'''

for ir in sum_result_1.itertuples():

print ir[1], ir[2], ir[3]

部分结果:

'''按两个条件进行分组'''

my_grouped_2 = my_df.groupby([my_df['stamp'], my_df['account']])['mem_p', 'cpu_p']

sum_result_2 = my_grouped_2.sum().reset_index()

for ir in sum_result.itertuples():

print ir[1], ir[2], ir[3], ir[4]

部分结果:

说明:

sum()返回的结果集中似乎缺少了用于分组的字段,导致在后继处理中无法得到对应关系,只好调用reset_index()把分组字段补足(在本例中是stamp和account字段)

pandas官网对pandas的解释:powerful Python data analysis toolkit

你可能感兴趣的:(python分组求和)