当前位置: 首页 > 知识库问答 >
问题:

熊猫滚动应用没有任何作用

司徒隐水
2023-03-14

我有一个这样的数据帧:

df2 = pd.DataFrame({'date': ['2015-01-01', '2015-01-02', '2015-01-03'],
                    'value': ['a', 'b', 'a']})

         date value
0  2015-01-01     a
1  2015-01-02     b
2  2015-01-03     a

我试图了解如何应用自定义滚动函数。我尝试过这样做:

df2.rolling(2).apply(lambda x: 1)

但这给了我原来的DataFrame回来:

         date value
0  2015-01-01     a
1  2015-01-02     b
2  2015-01-03     a

如果我有一个不同的数据帧,如下所示:

df3 = pd.DataFrame({'a': [1, 2, 3], 'value': [4, 5, 6]})

同样的滚动应用似乎工作:

df3.rolling(2).apply(lambda x: 1)

     a  value
0  NaN    NaN
1  1.0    1.0
2  1.0    1.0

为什么这对第一个数据帧不起作用?

熊猫版本:0.20。2.

Python版本:2.7.10

使现代化

所以,我意识到df2的列是对象类型的,而lambda函数的输出是整数。df3的列都是整数列。我假设这就是应用程序不起作用的原因。

以下操作不起作用:

df2.rolling(2).apply(lambda x: 'a')
         date value
0  2015-01-01     a
1  2015-01-02     b
2  2015-01-03     a

此外,假设我想在滚动基础上连接value列中的字符,以便lambda函数的输出是字符串,而不是整数。以下方法也不起作用:

df2.rolling(2).apply(lambda x: '.'.join(x))

         date value
0  2015-01-01     a
1  2015-01-02     b
2  2015-01-03     a

这是怎么回事?是否可以将滚动操作应用于pandas中的对象类型列?

共有1个答案

左丘嘉木
2023-03-14

这里有一种方法可以做到这一点。注意到rollingnumpy方法的包装器,以及与之相关的效率,这并不是问题所在。这仅仅提供了一个类似的api,允许在非数字列上滚动:

import pandas as pd

class MyDataFrame(pd.DataFrame):

    @property
    def _constructor(self):
        return MyDataFrame

    def rolling_object(self, window, column, default):
        return pd.concat(
            [self[column].shift(i) for i in range(window)],
            axis=1).fillna(default).T

这将创建一个自定义dataframe类,该类具有rolling\u对象方法。它不能很好地匹配pandas方法,因为它一次只在单个列上运行。

df2 = MyDataFrame({'date': ['2015-01-01', '2015-01-02', '2015-01-03'],
                   'value': ['a', 'b', 'c'],
                   'num': [1, 2, 3]
                   })

print(df2.rolling_object(2, 'value', '').apply(lambda x: '.'.join(x)))
0     a.
1    b.a
2    c.b
dtype: object
 类似资料:
  • 问题内容: 我最终在写出这个问题的时候就弄清楚了,所以无论如何我都会发布并回答我自己的问题,以防别人需要一点帮助。 问题 假设我们有一个,包含该数据。 目标 对于每一行,将 其一个月*以内的每一行的总和相加,最好使用一种非常干净的语法。 * 我尝试过的 但这引发了异常 版: 问题答案: 使用偏移量而不是专门使用30天或大约一个月。 最初,我凭直觉跳了起来,使用了一个月,但现在很清楚为什么不起作用。

  • 问题内容: 我的动机是利用熊猫功能来进行滚动多因素回归(这个问题是 不是 关于滚动多因素回归)。我希望我可以在a之后使用,并使用所得结果提取ndarray并执行必要的矩阵乘法。那样行不通。 这是我发现的: 对象是什么样的: 矩阵乘法的行为正常: 使用Apply执行逐行点积的行为符合预期: Groupby-> Apply的行为符合我的预期: 但是当我跑步时: 我得到: AttributeError:

  • 我需要得到df的滚动第二大值。 以获得最大的价值 当我尝试这个时,python抛出了一个错误 这是虫子吗?我还能用什么性能好的?

  • 我想有一个滚动应用的数据帧,但是我有问题与我的自定义函数,我想有一个额外的输入: 这是回报

  • 问题内容: 我正在尝试对数据框进行列绑定并遇到pandas的问题,因为它似乎不起作用: 结果是 即使我使用重置索引 然后尝试 它仍然产生相同的结果! 问题答案: 如果我正确理解您的意思,这就是您想要做的。 这使: 实际上,我期望得到相同的结果。 这是 jreback 的出色解释: “忽略”,表示未在连接轴上对齐。它只是按照传递的顺序将它们粘贴在一起,然后为实际索引(例如)重新分配一个范围,因此联接

  • 问题内容: 我是Python和Pandas库的初学者,我对DataFrame的一些基本功能感到困惑。我有一个熊猫DataFrame,如下所示: 但是,在执行一些功能之后: 我再也无法使用df.head()函数了: 我不明白为什么会这样。我在这里做错什么了吗?任何指针都欢迎!谢谢。 问题答案: 返回df的前n行。现在默认情况下要显示一个熊猫检查终端的宽度,如果该宽度太小而无法显示摘要视图。在第二种情