我有一个选项卡式 Flutter 界面,使用 DefaultTabController 和 3 个页面,每个页面都是一个有状态的小部件。我似乎能够在前两个选项卡之间切换就好了,但是当我切换到第 3 页时,第一页的状态对象被处理掉了。随后的状态更新(使用 setState())然后失败。
我已经覆盖了第一页状态对象的 dispose() 方法,以便它在处理时打印一条消息。我一点击第三个标签,它就会被处理掉。我找不到有关 Flutter 为什么处理状态对象的文档。(生命周期有很多,但不是通过各个阶段的原因。)
我不认为设置标签没有什么不寻常的地方。
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
title: Text(title),
bottom: TabBar(
tabs: [
// Use these 3 icons on the tab bar.
Tab(icon: Icon(Icons.tune)),
Tab(icon: Icon(Icons.access_time)),
Tab(icon: Icon(Icons.settings)),
],
),
),
body: TabBarView(
children: [
// These are the 3 pages relating to to the tabs.
ToolPage(),
TimerPage(),
SettingsPage(),
],
Run Code Online (Sandbox Code Playgroud)
页面本身非常简单。没有动画。只是开关和滑块等。我认为我从我所看到的代码示例中所做的唯一偏离是,我使主应用程序小部件有状态,我扩展了标签页以支持 wantKeepAlive() 和我覆盖了 wantKeepAlive 以将其设置为 …
我正在尝试使用df.loc[df.groupby(keys)['column'].idxmax()].
然而,我发现df.groupby(keys)['column'].idxmax()在我大约 2700 万行的数据集上需要很长时间。有趣的是,df.groupby(keys)['column'].max()在我的数据集上运行只需要 13 秒,而运行df.groupby(keys)['column'].idxmax()需要 55 分钟。我不明白为什么返回行的索引比从行返回值需要 250 倍的时间。也许我可以做些什么来加速 idxmax?
如果没有,是否有另一种方法可以比使用 idxmax 更快地按最大值从组中选择行?
有关其他信息,我使用两个键并在 groupby 和 idxmax 操作之前对这些键上的数据帧进行排序。这是 Jupyter Notebook 中的样子:
import pandas as pd
df = pd.read_csv('/data/Broadband Data/fbd_us_without_satellite_jun2019_v1.csv', encoding='ANSI', \
usecols=['BlockCode', 'HocoNum', 'HocoFinal', 'TechCode', 'Consumer', 'MaxAdDown', 'MaxAdUp'])
Run Code Online (Sandbox Code Playgroud)
%%time
df = df[df.Consumer == 1]
df.sort_values(['BlockCode', 'HocoNum'], inplace=True)
print(df)
Run Code Online (Sandbox Code Playgroud)
HocoNum HocoFinal BlockCode TechCode
4631064 130077 AT&T Inc. 10010201001000 10
4679561 130077 AT&T Inc. 10010201001000 11
28163032 130235 Charter Communications 10010201001000 43
11134756 …Run Code Online (Sandbox Code Playgroud)