python-如何获取滚动熊猫数据框子集
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-如何获取滚动熊猫数据框子集,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2248字,纯文字阅读大概需要4分钟。
内容图文
![python-如何获取滚动熊猫数据框子集](/upload/InfoBanner/zyjiaocheng/667/711377d3f02b4eb6b8f388437c79d840.jpg)
我想以“滚动”方式获取数据框子集.
我尝试了几项都没有成功,这是我想做的一个例子.让我们考虑数据帧.
df
var1 var2
0 43 74
1 44 74
2 45 66
3 46 268
4 47 66
我想用执行条件总和的以下函数创建一个新列:
def func(x):
tmp = (x["var1"] * (x["var2"] == 74)).sum()
return tmp
并这样称呼它
df["newvar"] = df.rolling(2, min_periods=1).apply(func)
这意味着该函数将基于数据帧应用,而不是针对每一行或每一列
它会回来
var1 var2 newvar
0 43 74 43 # 43
1 44 74 87 # 43 * 1 + 44 * 1
2 45 66 44 # 44 * 1 + 45 * 0
3 46 268 0 # 45 * 0 + 46 * 0
4 47 66 0 # 46 * 0 + 47 * 0
有pythonic的方法可以做到这一点吗?
这只是一个示例,但条件(始终基于子数据帧值取决于多于2列.
解决方法:
更新的评论
@unutbu对a very similar question here发布了一个很好的答案,但看来他的答案是基于pd.rolling_apply的,该索引将索引传递给函数.我不确定如何使用当前的DataFrame.rolling.apply方法复制它.
原始答案
似乎通过apply函数传递给参数的变量是每列的numpy数组(一次一个),而不是DataFrame,因此很遗憾,您无法访问任何其他列.
但是您可以做的是使用一些布尔逻辑,根据var2是否为74临时创建一个新列,然后使用滚动方法.
df['new_var'] = df.var2.eq(74).mul(df.var1).rolling(2, min_periods=1).sum()
var1 var2 new_var
0 43 74 43.0
1 44 74 87.0
2 45 66 44.0
3 46 268 0.0
4 47 66 0.0
临时列基于上面代码的前半部分.
df.var2.eq(74).mul(df.var1)
# or equivalently with operators
# (df['var2'] == 74) * df['var1']
0 43
1 44
2 0
3 0
4 0
查找传递给应用的变量的类型
了解实际传递给apply函数的内容非常重要,我永远无法记住传递的内容,因此,如果我不确定我会打印出变量及其类型,以便我可以清楚地知道我是哪个对象正在处理.请参阅带有原始DataFrame的此示例.
def foo(x):
print(x)
print(type(x))
return x.sum()
df.rolling(2, min_periods=1).apply(foo)
输出量
[ 43.]
<class 'numpy.ndarray'>
[ 43. 44.]
<class 'numpy.ndarray'>
[ 44. 45.]
<class 'numpy.ndarray'>
[ 45. 46.]
<class 'numpy.ndarray'>
[ 46. 47.]
<class 'numpy.ndarray'>
[ 74.]
<class 'numpy.ndarray'>
[ 74. 74.]
<class 'numpy.ndarray'>
[ 74. 66.]
<class 'numpy.ndarray'>
[ 66. 268.]
<class 'numpy.ndarray'>
[ 268. 66.]
<class 'numpy.ndarray'>
内容总结
以上是互联网集市为您收集整理的python-如何获取滚动熊猫数据框子集全部内容,希望文章能够帮你解决python-如何获取滚动熊猫数据框子集所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。