python - 当索引是 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'
请问,有人有什么想法吗?
谢谢你的帮助!最好的,
解决方案
下面的工作代码。我忘记了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)
推荐阅读
- javascript - 我的模式的关闭按钮不起作用
- prometheus - 计算移动时间窗口中连续点之间百分比下降的发生次数
- javascript - 为什么我的带有 if 语句的 while 循环不能正常工作?
- excel - 使用 selenium 检查域
- python - 将信号的值分配给变量
- openssl - Pycurl 不是针对 Openssl 编译的,当我尝试使用 wfuzz 时如何解决这个问题?
- javascript - 使用离子标签时,Ionic 4 + vue.js / ion-button 不可点击?
- typescript - 获取Angular中对象的属性类型
- apache - 将 site.com/board 重定向到 newsite.com
- python - 如何使用部分 URL 来过滤模型?(使用美味派)