这更像是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