Python:为报告创建模型(使用pandas)

Python:为报告创建模型(使用pandas),python,pandas,Python,Pandas,这更像是python的模型设计问题 我需要将多个日志文件中的数据解析并提取到数据帧中。 从这些数据帧中,我需要创建报告(如csv、excel等) 这种设计的一种方法是创建一个具有2个功能的文件: 1.从日志文件提取数据的函数(正则表达式可以) 2.熊猫查询的功能,类似这样: def get_top1000(group): return group.sort_index(by='births', ascending=False)[:1000] grouped = names.groupb

这更像是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正确实现这一点?

您需要:

样本:

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
如果数据中有其他列,请首先使用以下列:

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
如何用python正确地实现这一点?…有什么地方做得不正确?我的类可以得到所有这些查询,并为此生成报告……你想让我们构建你的类吗?这个问题太宽泛了。您没有告诉我们您的模型或需要提取和报告的内容。
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