首页 > 解决方案 > 当索引是 PeriodIndex 时,如何访问 apply/lambda 函数中的索引值?

问题描述

在 apply/lambda 组合中访问索引值时,我使用name参数。但在周期指数的情况下,它似乎不起作用。在下面的代码中,我正在计算给定行的完成率,考虑 4 小时。

import pandas as pd

p4h = pd.period_range(start='2020-02-01 00:00', end='2020-02-04 00:00', freq='4h')
p1h = pd.period_range(start='2020-02-01 00:00', end='2020-02-04 00:00', freq='1h')

df = p1h.to_series()
p4h_st_as_series = p4h.start_time.to_series()

df['OpenPI'] = df.apply(lambda x:
                   p4h.to_series().loc[p4h_st_as_series.index <=
                             x.start_time].index[-1])

completion = df.apply(lambda row: ((row.name.end_time - row['OpenPI'].start_time)
                          /(row['OpenPI'].end_time - row['OpenPI'].start_time)))

结果:

>>> AttributeError: 'Period' object has no attribute 'name'

请问,有人有什么想法吗?

谢谢你的帮助!最好的,

标签: pythonpandaslambdaperiod

解决方案


下面的工作代码。我忘记了axis=1丢失的那个。

import pandas as pd

p4h = pd.period_range(start='2020-02-01 00:00', end='2020-02-04 00:00', freq='4h', name='p4h')
p1h = pd.period_range(start='2020-02-01 00:00', end='2020-02-04 00:00', freq='1h', name='p1h')

df = p1h.to_frame()
p4h_st_as_series = p4h.start_time.to_series()

df['OpenPI'] = df.apply(lambda x:
               p4h.to_series().loc[p4h_st_as_series.index <=
                         x.name.start_time].index[-1], axis=1)

completion = df.apply(lambda row: ((row.name.end_time - row.OpenPI.start_time)
                      /(row.OpenPI.end_time - row.OpenPI.start_time)), axis=1)

推荐阅读