У меня есть объект pandas.Series с иерархическим индексом, состоящим из двух уровней: (код, дата). У меня также есть карта {date -> code}. Я хотел бы получить серию, индексированную только по дате, так что для каждой даты код просматривается на предоставленной карте, а затем пара (код, дата) просматривается в исходной серии. Каков наилучший способ добиться этого в Пандах? Большое спасибо за вашу помощь.Необычное индексирование в pandas
2
A
ответ
2
Короткий ответ: Обычно NDFrames (такие как Series) индексируются по метке. Но также можно индексировать NDFrame по индексу. То есть, вы можете индексировать NDFrame, используя индекс!
Итак, преобразуйте dict в MultiIndex. Используйте MultiIndex для выбора строк из серии : series[index]
.
Предположим, что ваша серия выглядит следующим образом:
import numpy as np
import pandas as pd
np.random.seed(0)
N, M = 3, 5
big_dates = pd.date_range('2000-1-1', periods=M, freq='D')
index = pd.MultiIndex.from_product([np.arange(N), big_dates])
series = pd.Series(np.random.randint(10, size=N*M), index=index)
print(series)
# 0 2000-01-01 5
# 2000-01-02 0
# 2000-01-03 3
# 2000-01-04 3
# 2000-01-05 7
# 1 2000-01-01 9
# 2000-01-02 3
# 2000-01-03 5
# 2000-01-04 2
# 2000-01-05 4
# 2 2000-01-01 7
# 2000-01-02 6
# 2000-01-03 8
# 2000-01-04 8
# 2000-01-05 1
# dtype: int64
и пусть Dict (назовем его codemap
) выглядит следующим образом:
dates = pd.date_range('2000-1-1', periods=N, freq='D')
codes = np.arange(N)
np.random.shuffle(codes)
codemap = dict(zip(dates, codes))
# {Timestamp('2000-01-01 00:00:00', offset='D'): 0,
# Timestamp('2000-01-02 00:00:00', offset='D'): 1,
# Timestamp('2000-01-03 00:00:00', offset='D'): 2}
, то вы можете сформировать второй мультииндексных из от codemap
dict:
codemap_index = pd.MultiIndex.from_arrays([codemap.values(), codemap.keys()])
и использовать его для индексации серии:
result = series[codemap_index]
# 0 2000-01-01 5
# 1 2000-01-02 3
# 2 2000-01-03 8
# dtype: int64
Наконец, использование droplevel удалить уровень кода в индексе:
result.index = result.index.droplevel(0)
print(result)
дает
2000-01-01 5
2000-01-02 3
2000-01-03 8
dtype: int64
Смежные вопросы
- 1. Pandas - Индексирование не индексом
- 2. Re-индексирование DataFrame в Pandas
- 3. . Индексирование индекса в Pandas-Python
- 4. Операторы Pandas if и индексирование
- 5. индексирование подмножеств в столбце кадра данных pandas
- 6. Индексирование несколькими полями с pandas в python
- 7. динамическое индексирование с использованием меток в pandas
- 8. Индексирование pandas dataframes внутри pandas dataframes с python
- 9. индексирование и поворот (кадр данных, pandas, python)
- 10. Индексирование серии pandas с исходным индексом DataFrame
- 11. Pandas groupby индексирование до и после преобразования
- 12. Индексирование на основе меток Pandas (.loc)
- 13. индексирование кадра данных pandas с использованием loc
- 14. Индексирование нового столбца для boxplot pandas dataframe
- 15. Pandas dataframes: Объединение местоположения и целочисленное индексирование
- 16. На диске индексирование Pandas multiindexed HDFStore
- 17. Индексирование и нарезка Pandas и GeoPandas
- 18. Нечетное индексирование поведения Pandas dataframe на дату
- 19. pandas: Булевское индексирование с несколькими индексами
- 20. pandas, индексирование цепочек, пробелы в csv и скорость
- 21. Индексирование и выбор только найденных столбцов в Pandas python
- 22. Индексирование для расчета по столбцам в Python pandas dataframe
- 23. Как использовать булевское индексирование для отношения подстроки в pandas dataframe?
- 24. Индексирование/выбор по годам в Pandas при использовании MultiIndex
- 25. Индексирование по символу в столбце Python/Pandas DataFrame
- 26. Индексирование DataFrame
- 27. Python list или pandas dataframe произвольное индексирование и нарезка
- 28. Делает ли индексирование быстрее среза фрагмента данных pandas?
- 29. Pandas - индексирование данных, созданных с помощью агрегатора типа .sum()
- 30. Булевое индексирование с помощью Pandas не работает для меня
Awesome! Большое спасибо, Ubuntu. Я не знал, что я могу использовать индекс для индексации серии. –