Python:为报表创建一个模型(使用pandas)



这更像是python的模型设计问题。

我需要从多个日志文件解析数据并将其提取到熊猫数据帧中。从这些数据帧中,我需要创建报告(如csv,excel等)。

一种设计方法是创建一个具有 2 个函数的文件:1.从日志文件中提取数据的函数(正则表达式很好)2.熊猫查询功能,是这样的:

def get_top1000(group):
  return group.sort_index(by='births', ascending=False)[:1000]
  grouped = names.groupby(['year', 'sex'])
  top1000 = grouped.apply(get_top1000)

然后,我的类可以获取所有这些查询并为此生成报告。如何用python正确实现这一点?

你需要SeriesGroupBy.nlargest

df = names.groupby(['year', 'sex'])['births'].nlargest(1000)

样本:

names = pd.DataFrame({'year':[2000,2000,2000,2000,2000],
                   'sex':['M','M','F','F','F'],
                   'births':[7,8,9,1,2]})
print (names)
   births sex  year
0       7   M  2000
1       8   M  2000
2       9   F  2000
3       1   F  2000
4       2   F  2000
df = names.groupby(['year', 'sex'])['births']
          .nlargest(1)
          .reset_index(level=2, drop=True)
          .reset_index()
print (df)
   year sex  births
0  2000   F       9
1  2000   M       8

如果数据中有其他列,请先set_index这些列:

names = pd.DataFrame({'year':[2000,2000,2000,2000,2000],
                   'sex':['M','M','F','F','F'],
                   'births':[7,8,9,1,2],
                    'val':[3,2,4,5,6]})
print (names)
   births sex  val  year
0       7   M    3  2000
1       8   M    2  2000
2       9   F    4  2000
3       1   F    5  2000
4       2   F    6  2000
df = names.set_index('val') 
          .groupby(['year', 'sex'])['births'] 
          .nlargest(1) 
          .reset_index()
print (df)
   year sex  val  births
0  2000   F    4       9
1  2000   M    2       8

最新更新