Как индексировать Pandas фрейм данных со списком фрагментов - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть два фрейма данных, ret и bins. Я хотел бы взять значения индекса из bins, создать диапазон для каждой строки в bins, а затем использовать этот список диапазонов для выбора данных из ret. Каким-то образом это работает, когда я передаю индекс срезов (введенный вручную), но не работает, когда я передаю список, сохраненный в переменной a

ret = pd.DataFrame({'px': [.1, -.15, .30, -.20, .05]})
bins = pd.DataFrame({'t1': [3,4]}, index=[1,2])
a = []
for i, b in bins.iterrows():
    a.append(slice(i, b.t1))

print('a',a)
print('np.r_[a]',np.r_[a])
print('np.r[slice',np.r_[slice(1, 3, None) , slice(1, 4, None)])
print(ret.iloc[np.r_[slice(1, 3, None) , slice(1, 4, None)]]) # this WORKS
print(ret.iloc[a] #this DOES NOT WORK)

, здесь вывод:

a [slice(1, 3, None), slice(2, 4, None)]
np.r_[a] [slice(1, 3, None) slice(2, 4, None)]
np.r[slice [1 2 1 2 3]
     px
1 -0.15
2  0.30
1 -0.15
2  0.30
3 -0.20
...
TypeError: int() argument must be a string, a bytes-like object or a number, not 'slice'

1 Ответ

0 голосов
/ 10 апреля 2020

Собираюсь ответить на мой собственный вопрос здесь! Проблема в том, что slice () слишком громоздок для использования. Проще просто сгладить списки массивов. Если у кого-то есть предложения, пожалуйста, напишите здесь!

ret = pd.DataFrame({'px': [.1, -.15, .30, -.20, .05]})
bins = pd.DataFrame({'t1': [3,4]}, index=[1,2])
a = [ret[i:b.t1].index for i, b in bins.iterrows()]
out = [item for sublist in a for item in sublist]
print(ret.loc[out])
>>>     px
>>>1 -0.15
>>>2  0.30
>>>2  0.30
>>>3 -0.20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...