举个例子:

import pandas as pd    
a = pd.Series([[1,2,3],[4,5,6],[7,8,9]])
a

0    [1, 2, 3]
1    [4, 5, 6]
2    [7, 8, 9]
dtype: object

我正在寻找每一行到下面一行的百分比变化,例如结果:

0                                  [-0.75, -0.6, -0.5]
1    [-0.42857142857142855, -0.375, -0.333333333333...
2                                                 None
dtype: object

我有这个解决方案:

import pandas as pd
a = pd.Series([[1,2,3],[4,5,6],[7,8,9]])

pd.Series([ [ [ (xx-yy)/yy for xx,yy in zip(x,y)] if y is not None else None] 
       for x,y in zip(a,a.shift(-1))])

但这似乎过于复杂了.如果能有一个更简洁的解决方案,我将不胜感激.

推荐答案

通常情况下,使用列表的序列/数据帧不是一个好主意.您的操作将是一个带有DataFrame的简单pct_change:

df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
df.pct_change(-1)

#           0      1         2
# 0 -0.750000 -0.600 -0.500000
# 1 -0.428571 -0.375 -0.333333
# 2       NaN    NaN       NaN

如果您确实想要一系列列表,请使用DataFrame作为中间层:

a = pd.Series([[1,2,3],[4,5,6],[7,8,9]])
out = pd.DataFrame(a.tolist()).pct_change(-1).agg(list, axis=1)

输出:

0                                  [-0.75, -0.6, -0.5]
1    [-0.4285714285714286, -0.375, -0.3333333333333...
2                                      [nan, nan, nan]
dtype: object

Python相关问答推荐

仅从风格中获取 colored颜色 循环

Matlab中是否有Python的f-字符串等效物

Pandas 有条件轮班操作

将输入管道传输到正在运行的Python脚本中

如何找到满足各组口罩条件的第一行?

SQLAlchemy Like ALL ORM analog

Scrapy和Great Expectations(great_expectations)—不合作

如何并行化/加速并行numba代码?

如何启动下载并在不击中磁盘的情况下呈现响应?

使用BeautifulSoup抓取所有链接

基于行条件计算(pandas)

如何找出Pandas 图中的连续空值(NaN)?

使用Python异步地持久跟踪用户输入

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

如何获得满足掩码条件的第一行的索引?

Django在一个不是ForeignKey的字段上加入'

Polars定制函数返回多列

按列表分组到新列中

将参数从另一个python脚本中传递给main(argv

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?