- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个之前移动过的 pandas 数据透视表,现在看起来像这样:
pivot
A B C D E
0 5.3 5.1 3.5 4.2 4.5
1 5.3 4.1 3.5 4.2 NaN
2 4.3 4.1 3.5 NaN NaN
3 4.3 4.1 NaN NaN NaN
4 4.3 NaN NaN NaN NaN
我正在尝试在对每一列进行迭代的反对角线上使用可变窗口(在本例中为 3 和 4 个周期)计算滚动平均值,并尝试将该值存储在新的数据框中,如下所示:
expected_df with a 3 periods window
A B C D E
0 4.3 4.1 3.5 4.2 4.5
expected_df with a 4 periods window
A B C D E
0 4.5 4.3 3.5 4.2 4.5
到目前为止,我尝试对原始数据透视表进行子集化并创建一个不同的数据框,该数据框仅包含每列的指定窗口值,然后计算平均值,如下所示:
subset
A B C D E
0 4.3 4.1 3.5 4.2 4.5
1 4.3 4.1 3.5 4.2 NaN
2 4.3 4.1 3.5 NaN NaN
为此,我尝试构建以下 for 循环:
df2 = pd.DataFrame()
size = pivot.shape[0]
window = 3
for i in range(size):
df2[i] = pivot.iloc[size-window-i:size-i,i]
即使这个 pivot.iloc[size-window-i:size-i,i]
在我手动传入索引时确实返回了我需要的值,但在for 循环,它错过了第二列的第一个值,依此类推:
df2
A B C D E
0 4.3 NaN NaN NaN NaN
1 4.3 4.1 NaN NaN NaN
2 4.3 4.1 3.5 NaN NaN
有没有人知道如何计算移动平均值或如何修复 for 循环部分?预先感谢您的意见。
最佳答案
IIUC:
将
所有内容移回shifted = pd.concat([df.iloc[:, i].shift(i) for i in range(df.shape[1])], axis=1)
shifted
A B C D E
0 5.3 NaN NaN NaN NaN
1 5.3 5.1 NaN NaN NaN
2 4.3 4.1 3.5 NaN NaN
3 4.3 4.1 3.5 4.2 NaN
4 4.3 4.1 3.5 4.2 4.5
然后你可以得到你的意思。
# Change this 🡇 to get the last n number of rows
shifted.iloc[-3:].mean()
A 4.3
B 4.1
C 3.5
D 4.2
E 4.5
dtype: float64
或滚动平均值
# Change this 🡇 to get the last n number of rows
shifted.rolling(3, min_periods=1).mean()
A B C D E
0 5.300000 NaN NaN NaN NaN
1 5.300000 5.100000 NaN NaN NaN
2 4.966667 4.600000 3.5 NaN NaN
3 4.633333 4.433333 3.5 4.2 NaN
4 4.300000 4.100000 3.5 4.2 4.5
我将使用 strides 构建 3-D 数组并在其中一个轴上取平均值。这更快但令人困惑......
此外,我不会使用它。我只是想确定如何通过步幅捕获对角线元素。这对我来说是更多的练习,我想分享。
from numpy.lib.stride_tricks import as_strided as strided
a = df.values
roll = 3
r_ = roll - 1 # one less than roll
h, w = a.shape
w_ = w - 1 # one less than width
b = np.empty((h + 2 * w_ + r_, w), dtype=a.dtype)
b.fill(np.nan)
b[w_ + r_:-w_] = a
s0, s1 = b.strides
a_ = np.nanmean(strided(b, (h + w_, roll, w), (s0, s0, s1 - s0))[w_:], axis=1)
pd.DataFrame(a_, df.index, df.columns)
A B C D E
0 5.300000 NaN NaN NaN NaN
1 5.300000 5.100000 NaN NaN NaN
2 4.966667 4.600000 3.5 NaN NaN
3 4.633333 4.433333 3.5 4.2 NaN
4 4.300000 4.100000 3.5 4.2 4.5
我对此感觉比使用步幅更好
import numpy as np
from numba import njit
import warnings
@njit
def dshift(a, roll):
h, w = a.shape
b = np.empty((h, roll, w), dtype=np.float64)
b.fill(np.nan)
for r in range(roll):
for i in range(h):
for j in range(w):
k = i - j - r
if k >= 0:
b[i, r, j] = a[k, j]
return b
with warnings.catch_warnings():
warnings.simplefilter('ignore', category=RuntimeWarning)
df_ = pd.DataFrame(np.nanmean(dshift(a, 3), axis=1, ), df.index, df.columns)
df_
A B C D E
0 5.300000 NaN NaN NaN NaN
1 5.300000 5.100000 NaN NaN NaN
2 4.966667 4.600000 3.5 NaN NaN
3 4.633333 4.433333 3.5 4.2 NaN
4 4.300000 4.100000 3.5 4.2 4.5
关于python - Python 中反对角线的滚动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54870279/
我的查询不工作,它总是显示相关的 0。即使针对数据确实存在。 SELECT number, MATCH(number) AGAINST('02' '01' '03' WITH QUERY EXPA
我正在尝试对字段进行全文搜索以匹配字符串的特定部分。考虑一个包含数组值的长字符串,例如 201:::1###193:::5###193:::6###202:::6。 ### 分隔数组元素,::: 分隔
我正在构建一个音乐应用程序。在我的数据库中,我有一个“艺术家”表,与“专辑”表相关,与“轨道”表相关。 我的应用程序的每个用户都可以“喜欢”(竖起大拇指)或“不喜欢”(竖起大拇指)艺术家/专辑/轨道。
我正在使用这个搜索 -> 将 (c1, c2) 与 (">dg*"在 bool 模式下匹配); 我得到了这个列表 1 dgas 2 格卡 3 dgicb 4 天 5 位数 6 dgly 7 总督 8
我想从数据库中找到 date 为“2013-04”的所有记录。 我使用: SELECT date, pastabos FROM aktai WHERE MATCH(uzsakovas) AGAINST
我正在尝试为评论实现一个 upvote/downvote 机制(类似于 reddit 上的 upvote/downvote 机制)。我有一个名为 commentReputation 的单独集合里面的文
我从事安全关键应用程序开发工作。最近,作为一名代码审阅者,我提示如下所示的编码风格,但无法提出强有力的理由反对它。那么反对这种变量冗余/重复的一个很好的论据是什么,我正在寻找可能导致问题或可能失败的测
我有一个全文索引表,其中包含数据系列。没有空格,拼写正确。如何将此查询匹配结果作为分数并按分数按 DESC 顺序显示?我总是得到空集,不知道为什么。 SELECT *, MATCH(MEDIA_TI
编辑:改写问题。 除了不好的做法,还有什么其他原因反对 HTML 中的空段落? 原创: 背景 目前,要在我们的 CMS 中添加漂亮的空格段落,您需要按两次 Enter 键。我不喜欢空洞的段落,因为它们
我正在尝试将对象转换为 Json 字符串。我看到一个 TJson::ObjectToJsonString() 似乎可以满足需求,但似乎不起作用。我在 Delphi 中有确切的代码,没有问题。因此,显然
如果我想为 Linux 开发一个类似注册表的系统,我应该避免哪些 Windows 注册表设计失败? 哪些功能是绝对必要的? 主要问题是什么(安全性、易于配置……)? 我认为 Windows 注册表不是
自从 Adobe AIR 发布以来,我想知道为什么 Java Web Start 过去没有引起更多关注,因为在我看来它似乎非常相似,但 web start 可用的时间要长得多。 主要是因为 Sun
我经常想用一个假设 free_if_heap(void *ptr)函数,因为这会让我无需关心就返回 malloc 的、静态的或堆栈对象。例如 char *foo(int arg) { if (
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我正在研究用 GCC 编译的 ARM C/C++ 代码的性能优化。 CPU 是 Tegra 3。 据我所知标志-mthumb表示生成旧的 16 位 Thumb 指令。在不同的测试中,-marm 的性能
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我正要调试别人的代码,我偶然发现了一种处理全局数组的“方式”,我认为这种方式非常糟糕,但第一个使用它的人发誓要这样做。我需要找到反对它的论据。这是简化后的代码(这不是原始代码,只是一个抽象版本) 所以
select col1,col2,col3,col4,col5 from table1 where (col1 like '%keyword%' or col2 like '%keywo
我发现我经常进行递归调用只是为了重新排列参数。 例如,这是我对 endOther from codingbat.com 的解决方案: Given two strings, return true if
首先,我知道在复制文件时,如果缓冲区大小越大,复制过程就会越快。 以下 ruby 脚本用于逐行编写(即缓冲区的大小将取决于行的长度): input,output = ARGV[0], ARGV[1]
我是一名优秀的程序员,十分优秀!