【发布时间】:2016-12-16 03:07:04
【问题描述】:
我有一个看起来像这样的多索引数据框:
In[13]: df
Out[13]:
Last Trade
Date Ticker
1983-03-30 CLM83 1983-05-18
CLN83 1983-06-17
CLQ83 1983-07-18
CLU83 1983-08-19
CLV83 1983-09-16
CLX83 1983-10-18
CLZ83 1983-11-18
1983-04-04 CLM83 1983-05-18
CLN83 1983-06-17
CLQ83 1983-07-18
CLU83 1983-08-19
CLV83 1983-09-16
CLX83 1983-10-18
CLZ83 1983-11-18
索引有两个级别(即“日期”和“代码”)。我想对“最后交易”列应用一个函数,让我知道这个“最后交易”日期与索引“日期”相隔多少个月 我找到了一个计算函数:
from calendar import monthrange
def monthdelta(d1, d2):
delta = 0
while True:
mdays = monthrange(d1.year, d1.month)[1]
d1 += datetime.timedelta(days=mdays)
if d1 <= d2:
delta += 1
else:
break
return delta
我尝试应用以下函数 h 但它返回一个 AttributeError: 'Timestamp' object has no attribute 'index':
In[14]: h = lambda x: monthdelta(x.index.get_level_values(0),x)
In[15]: df['Last Trade'] = df['Last Trade'].apply(h)
如何应用一个同时使用列和索引值的函数?
感谢您的提示,
【问题讨论】:
标签: python pandas apply attributeerror multi-index