获取pandas中唯一列值的日期索引

2024-04-20 09:57:46 发布

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

给定如下数据帧:

                                contractID
Date                                      
1982-09-16  (SPZ1982, 1982-12-16 00:00:00)
1982-09-17  (SPZ1982, 1982-12-16 00:00:00)
1982-09-20  (SPZ1982, 1982-12-16 00:00:00)
                                   ...
2018-09-27  (SPZ2018, 2018-12-21 00:00:00)
2018-09-28  (SPZ2018, 2018-12-21 00:00:00)
2018-10-01  (SPZ2018, 2018-12-21 00:00:00)

我有重复的contractID,我想有效地对这些ID执行一个操作,比如:

def query(df, tup, startDate, endDate):
    ID = tup[0]
    ExpirationDate = tup[1]
    panel = df.loc[ID].loc[ExpirationDate].loc[startDate:endDate]
    return panel

df = pd.DataFrame()
print('acquiring daily data...')
for tup in contractUse['contractID'].unique():
    panel = query(rawData, tup, startDate, endDate)
    if df.empty:
        df = panel
    else:
        df = df.append(panel, verify_integrity=False)

return df

其中contractUse是上面介绍的数据帧。我只想迭代唯一的值。当我迭代惟一值时,我需要得到该惟一值何时开始的索引值,以及该惟一值何时停止的索引值。然后我将这个startDateendDate的唯一值提供给我的query函数。在熊猫身上有没有快速的方法?你知道吗


Tags: 数据iddfreturnquerylocpaneltup
1条回答
网友
1楼 · 发布于 2024-04-20 09:57:46

你需要做两件事:

  1. 不要使用一系列元组。把它分成两个独立的系列。你知道吗
  2. 使用GroupBy根据列将数据帧分割成块。你知道吗

因此,首先拆分contractID系列:

df[['key', 'contract_date']] = pd.DataFrame(df.pop('contractID').values.tolist())

然后按新创建的key序列分组:

g = df.groupby('key')

提取组的“开始和结束”索引现在与提取组并查看其索引一样简单。例如:

idx_start, idx_end = g.get_group('SPZ1982').index[[0, -1]]

相关问题 更多 >