excel拖动在pandas中的简单等效

2024-05-29 01:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我用熊猫已经有一段时间了。在Excel中,我们经常使用拖动功能,如图所示

enter image description here

我在熊猫身上使用的等效物如下:

def apply_drag(row, initial_value, initial_index, rate):
     count = (row.name - initial_index).days
     return initial_value * math.pow(1 + rate, count)

custom_nav_df["nav"] = custom_nav_df.apply(apply_drag, args=(initial_value, initial_index, risk_free_rate), axis=1)

虽然这符合我的目的,但我认为应该有一种更简单的方法来完成这样一项琐碎的任务。此外,对于这种情况,如果日期不是连续的,它将给出错误的结果

如果当前行的数据来自前一行(比如算术或几何级数),那么实现这一点的最简单方法应该是什么


Tags: 方法功能dfindexratevaluedefcount
1条回答
网友
1楼 · 发布于 2024-05-29 01:31:39

我认为你可以简化你的功能

def f(rate, start, n):
    yield start
    for _ in range(n-1):
        start *= rate
        yield start

现在,您可以简单地将其结果分配给列。下面是一个简单的例子:

In [20]: df = pd.DataFrame({'colA': list(range(5)) })

In [21]: df
Out[21]:
   colA
0     0
1     1
2     2
3     3
4     4

In [22]: df['nav'] = list(f(1.05, 100, len(df)))

In [23]: df
Out[23]:
   colA         nav
0     0  100.000000
1     1  105.000000
2     2  110.250000
3     3  115.762500
4     4  121.550625

或者,您可以使用索引简单地迭代每一行:

In [10]: df
Out[10]:
   A      B
0  0  100.0
1  1    NaN
2  2    NaN
3  3    NaN
4  4    NaN

In [11]: for i in df.index:
    ...:     if i:
    ...:         df.iat[i,1] = df.iat[i-1,1]*1.05
    ...:
    ...:

In [12]: df
Out[12]:
   A           B
0  0  100.000000
1  1  105.000000
2  2  110.250000
3  3  115.762500
4  4  121.550625

当然,您可以从空列开始:

In [14]: df['B'] = np.nan

In [15]: for i in df.index:
    ...:     if i:
    ...:         df.iat[i,1] = df.iat[i-1,1]*1.05
    ...:     else:
    ...:         df.iat[i,1] = 100
    ...:

In [16]: df
Out[16]:
   A           B
0  0  100.000000
1  1  105.000000
2  2  110.250000
3  3  115.762500
4  4  121.550625

相关问题 更多 >

    热门问题