首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫:引用其他行和其他数据的应用函数

熊猫:引用其他行和其他数据的应用函数
EN

Stack Overflow用户
提问于 2022-08-31 20:04:15
回答 1查看 50关注 0票数 0

我正在尝试构建一个在df.apply()中使用的函数,该函数引用1)其他行,2)另一DatetimeIndex。

代码语言:javascript
复制
dt_index = DatetimeIndex(['2022-09-16', '2022-12-16', '2023-03-10', '2023-06-16',
               '2023-09-15', '2023-12-15', '2024-03-15', '2024-06-14'],
              dtype='datetime64[ns]', freq=None)

关于主要发展中国家:

代码语言:javascript
复制
df.index =   DatetimeIndex(['2022-08-30', '2022-08-31', '2022-09-01', '2022-09-02',
               '2022-09-03', '2022-09-04', '2022-09-05', '2022-09-06',
               '2022-09-07', '2022-09-08',
               ...
               '2024-08-20', '2024-08-21', '2024-08-22', '2024-08-23',
               '2024-08-24', '2024-08-25', '2024-08-26', '2024-08-27',
               '2024-08-28', '2024-08-29'],
              dtype='datetime64[ns]', name='index', length=731, freq=None)

df =                 3M      1Y      2Y         
                                                                         
2022-08-30    1.00    1.00    1.00    1.000000  
2022-08-31    2.50    2.50    2.50    2.500000  
2022-09-01    3.50    3.50    3.50    3.500000  
2022-09-02    5.50    5.50    5.50    5.833333  
2022-09-03    5.65    5.65    5.65    5.983333  
           ...     ...     ...         ...  ...    
2024-08-25  630.75  615.75  599.75  607.750000 
2024-08-26  631.75  616.75  600.75  608.750000  
2024-08-27  632.75  617.75  601.75  609.750000  
2024-08-28  633.75  618.75  602.75  610.750000  
2024-08-29  634.75  619.75  603.75  611.750000  

我的目标是使用一个函数:

对于每个索引值,

  1. x,在df中,在dt_index中找到最近的两个值(下面有)

然后,

  1. df中返回:(x - id_low) / (id_high - id_low)

def变换(x,dt_index):id_low = dt_index.ilocdt_index.get_loc(x,method ='ffill') id_high = dt_index.ilocdt_index.get_loc(x,method ='bfill')

这是我不知道如何编写的第2部分,因为它引用了应用函数之外的df中的其他行。

任何帮助都很感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-31 20:22:11

在修复代码中的不准确之处后,

您只需在函数中引用您的dataframe df

代码语言:javascript
复制
def transform(x, dt_index):
    id_low = dt_index[dt_index.get_indexer([x.name], method ='ffill')][0]
    id_high = dt_index[dt_index.get_indexer([x.name], method ='bfill')][0]

    return (x - df.loc[id_low]) / (df.loc[id_high] - df.loc[id_low])

df.transform(transform, dt_index=dt_index, axis=1)

示例:

代码语言:javascript
复制
df = pd.DataFrame(np.arange(24).reshape(6, 4))
dt_index = pd.Index([0,2,5])

# Result:

          0         1         2         3
0       NaN       NaN       NaN       NaN
1  0.500000  0.500000  0.500000  0.500000
2       NaN       NaN       NaN       NaN
3  0.333333  0.333333  0.333333  0.333333
4  0.666667  0.666667  0.666667  0.666667
5       NaN       NaN       NaN       NaN

注:

NaN值是由于0/0的数学上未定义的结果所致:

id_low == id_high == x.name.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73561322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档