Таблица 5.6. Способы обработки связанных рангов
DataFrame умеет вычислять ранги как по строкам, так и по столбцам:
In [219]: frame = pd.DataFrame({'b': [4.3, 7, –3, 2], 'a': [0, 1, 0, 1],
.....: 'c': [–2, 5, 8, –2.5]})
In [220]: frame
Out[220]:
a b c
0 0 4.3 –2.0
1 1 7.0 5.0
2 0 –3.0 8.0
3 1 2.0 –2.5
In [221]: frame.rank(axis='columns')
Out[221]:
a b c
0 2.0 3.0 1.0
1 1.0 3.0 2.0
2 2.0 1.0 3.0
3 2.0 3.0 1.0
Индексы по осям с повторяющимися значениями
Во всех рассмотренных до сих пор примерах метки на осях (значения индекса) были уникальны. Хотя для многих функций pandas (например, reindex) требуется уникальность меток, в общем случае это необязательно. Рассмотрим небольшой объект Series с повторяющимися значениями в индексе:
In [222]: obj = Series(range(5), index=['a', 'a', 'b', 'b', 'c'])
In [223]: obj
Out[223]:
a 0
a 1
b 2
b 3
c 4
О том, являются значения уникальными или нет, можно узнать, опросив свойство is_unique:
In [224]: obj.index.is_unique
Out[224]: False
Выборка данных – одна из основных операций, поведение которых меняется в зависимости от наличия или отсутствия дубликатов. При доступе по индексу, встречающемуся несколько раз, возвращается объект Series, если же индекс одиночный, то скалярное значение:
In [225]: obj['a']
Out[225]:
a 0
a 1
dtype: int64
In [226]: obj['c']
Out[226]: 4
Это иногда усложняет код, поскольку тип, получающийся в результате индексирования, может зависеть от того, повторяется метка или нет.Такое же правило действует и для доступа к строкам в DataFrame:
In [227]: df = DataFrame(np.random.randn(4, 3), index=['a', 'a', 'b', 'b'])
In [228]: df
Out[228]:
0 1 2
a 0.274992 0.228913 1.352917
a 0.886429 –2.001637 –0.371843
b 1.669025 –0.438570 –0.539741
b 0.476985 3.248944 –1.021228
In [229]: df.ix['b']
Out[229]:
0 1 2
b 1.669025 –0.438570 –0.539741
b 0.476985 3.248944 –1.021228
Достарыңызбен бөлісу: |