我有一个这样的数据帧:
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中的对象类型列?
这里有一种方法可以做到这一点。注意到rolling
是numpy
方法的包装器,以及与之相关的效率,这并不是问题所在。这仅仅提供了一个类似的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行。现在默认情况下要显示一个熊猫检查终端的宽度,如果该宽度太小而无法显示摘要视图。在第二种情