- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
需要计算每个参赛队在某个时间点的平均每场比赛进球数 (rolling_avg
)。由于我的数据库是高度规范化的,因此这需要花费大量时间(+8k 行)
注意事项:
我计算的是一场比赛的总进球数(第 0 列),而不是每支球队的进球数。
这里省略了一些额外的列,但可能是相关的:其中之一是 date_time
列。
示例:在第 1 行(第二行)中,我们可以看到 1249
队的第一场比赛(他们在客场比赛)。在这场比赛中,有3个进球入账。 1249
队的下一场比赛在第 10 行进行,因为这次该队在主场比赛(因为它的 id
出现在 home_team_id
),我希望 home_rolling_avg
等于 3。它不应该考虑当前行。
问题:
我如何根据 total_goals
中的先前值并排除当前行来计算每个团队的目标扩展 average/mean,并将此平均值分配给相关列(取决于球队是主场还是客场)?
total_goals home_team_id away_team_id home_goals away_goals home_rolling_avg away_rolling_avg
0 2 1277 1241 1 1 NaN NaN
1 3 1245 1249 2 1 NaN NaN
2 1 1242 1246 0 1 NaN NaN
3 4 1261 1248 1 3 NaN NaN
4 2 1259 1240 2 0 NaN NaN
5 3 2981 1268 1 2 NaN NaN
6 1 1244 1255 1 0 NaN NaN
7 1 1254 1276 1 0 NaN NaN
8 7 1247 12140 5 2 NaN NaN
9 3 5681 1270 2 1 NaN NaN
10 1 1249 5681 0 1 NaN NaN
# in line 10 above, 'home_rolling_avg' should show 3 (3/1)
可以找到更大的样本 (n=100) here .应种类要求添加piRSquared (answer here)。
最佳答案
# easy tracking of long column names
hw = ['home_team_id', 'away_team_id']
# I found it easier to melt myself with some numpy help
hw_vals = df[hw].values.ravel() # flatten 2 columns
idx_rep = df.index.values.repeat(2) # repeat index [0, 0, 1, 1, ...
tot_rep = df.total_goals.values.repeat(2) # repeat totals [2, 2, 3, 3, ...
# This is the reshaped series of team ids with total_goals
s = pd.Series(tot_rep, [idx_rep, hw_vals])
# groupby with a combination of expanding().mean() and shift()
e = s.groupby(level=1).apply(lambda x: x.expanding().mean().shift()).dropna()
# style preference of mine to do assignments using index values
# and to get it done in one line
df.set_index(hw[0], append=1).assign(home_rolling_avg=e).reset_index(hw[0]) \
.set_index(hw[1], append=1).assign(away_rolling_avg=e).reset_index(hw[1])
更深入的解释
pd.melt
,我做到了。但我发现语法比我最终做的更难看。而且我知道 numpy 无论如何都做得更快。
level=1
进行分组,然后执行 expanding().mean()
。
assign
将新列包含到副本中。我喜欢这种方法,因为它允许我链接命令。所以我这样做了,通过重置索引并为客队重复该过程。作业之所以有效,是因为索引自然排列。替代方法
使用来自 collections
的 defaultdict
+ Counter
与史蒂文鲁什非常相似
from collections import defaultdict, Counter
c, d = Counter(), defaultdict(int)
home_avgpg = pd.Series(index=df.index)
away_avgpg = pd.Series(index=df.index)
for row in df.itertuples():
h = row.home_team_id
a = row.away_team_id
t = row.total_goals
if h in c:
home_avgpg.set_value(i, d[h] / c[h])
if a in c:
away_avgpg.set_value(i, d[a] / c[a])
d[h] += t
d[a] += t
c.update([h, a])
@StevenRauch 的回答非常快。
关于python - Pandas :根据条件扩展均值并排除当前行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667546/
我在 Excel 中有两个图表,但我想将这些图表合并为一个图表。如您所见,我缩小了 graph1 中图表的大小。我想移动 graph2 中的图表进入graph1中的空白区域 最佳答案 我认为在基本的
我正在为我的站点构建一个 HTML 模板,并希望在左侧有一个主要内容 Pane ,在右侧有一个导航 Pane (类似于 Twitter)。 我假设 DIV 不是首选方法,因为默认情况下它们是从上到下列
我有以下 fiddle :http://jsfiddle.net/BFSH4/ 如您所见,有两个问题: h1 和 h2 没有垂直对齐。 导航和内容未水平对齐。 对于 1. 我已经尝试了 margin
在下面的示例中,我试图让“左”和“右”div 并排显示。显然我的理解是有缺陷的,但我犯了什么错误,因为(至少在 Chrome 中)它们没有并排出现。 谢谢
我在 chrome 上使用 Tampermonkey 向网页添加按钮。单击时,脚本会分析页面,然后显示警报。这是显示按钮的代码: function Main(){ GM_addStyle(
我的自定义键盘中有 UICollectionView,它有两行高度相同但宽度不同(大小来自服务器)的单元格,滚动方向是水平的。 我怎样才能并排显示集合项,而不用这种基于先前单元格宽度的奇怪居中? 最佳
任何人都可以帮助将两个位图图像组合成一个位图 在安卓中(并排)。 谢谢,尤瓦拉杰 最佳答案 您可以使用 Canvas - 查看这篇文章: http://www.jondev.net/articles/
如果有的话,设计 RPM 的“正确”方法是什么,以便可以通过 YUM/RPM 并排安装多个版本而不会相互干扰?对于库,正确的答案似乎与 sonames 有关,尽管我找不到任何关于 sonames、符号
从我的 last question 跟进:我执行了 Steve 提供的所有步骤,SxS Parse 日志为空,但我仍然收到“Class Not Registered”错误。 我知道我的 .exe 正在
我想并排显示两个图 block 层,就像并排的传单插件 ( https://github.com/digidem/leaflet-side-by-side )。 但是,我不知道如何用 react 来做
我正在制作一个将 PO 导出为 PDF 的采购订单系统,但我需要在上半部分显示来自买方和卖方的数据。我想并排放置 2 个 DetailView,每个都有 50% 的页面宽度。有可能的?到目前为止,我还
无论屏幕大小如何,我都试图并排 float 两个 div。目前在 IE 7 中,如果我调整窗口大小,一个 div 会下降到另一个下方。我认为这是因为 div2 包含一个表格,一旦窗口边缘碰到表格,它就
我想使用这个数据框的 geom_bar() 创建一个并排的条形图, > dfp1 value percent1 percent 1 (18,29] 0.20909091 0.454545
我正在尝试在 Xcode (Swift) 中创建一个单位转换器,并一直在尝试在 Storyboard 中对 UI 进行排序。我一直试图在屏幕的上半部分并排放置两个表格 View ,以保存两个测量类型的
下面的代码运行良好。 eventDrag 和 Drop 我可以放置在表格内的任何位置。 但是我只想将事件拖放到事件的左侧和右侧。 我想从其他事件的顶部和底部停止拖动事件。只有左侧和右侧的其他事件我想拖
我似乎无法让我的图层列表正常工作。 我需要
我想要类似 unix 中的 paste 命令,它需要两个文件并打印第一行,第一个文件,然后是分隔符,然后是第二个文件的第一行,然后是换行符,然后是第一个文件的第二行第二个文件的文件分隔符第二行,等等。
我想将我的内部应用程序的测试版本部署到我的测试组,我需要它与当前的 LIVE 版本一起安装。 我更改了发布选项中的所有内容,但它仍然会覆盖我的实时安装。我还需要做什么?我是否必须更改“应用程序”选项卡
我想创建一个设置,其中左侧有一个图像,右侧有一个 div。我正在使用 float left 来完成此操作,但我希望右侧的 div 与左侧的图像具有相同的高度,并且文本垂直居中。 这是一个jsfiddl
如何让两张 table 并排放置。问题可能会出现,有时一张 table 可能比另一张 table 大它旁边的表格,所以这可能会导致问题并且下面的表格可能不对齐,我想解决。在我制作的演示中,我有四个表,
我是一名优秀的程序员,十分优秀!