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 = t('./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 = upby(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 = upby([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():
groupby分组
print ir[1], ir[2], ir[3], ir[4]
部分结果:
说明:
sum()返回的结果集中似乎缺少了⽤于分组的字段,导致在后继处理中⽆法得到对应关系,只好调⽤reset_index()把分组字段补⾜(在本例中是stamp和account字段)
pandas官⽹对pandas的解释:powerful Python data analysis toolkit
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论