Заполнение кадра данных pandas на основе индексов между двумя значениями

Я пытаюсь создать маску для трансляции в кадры данных: логический ряд, который указывает, находится ли данная строка между двумя значениями. Это легко сделать для одного логического оператора, скажем, для последних пяти элементов в кадре данных:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,1))
mask = (df.index.values>4)
df.loc[mask,'column'] = range(0,5)

Но как сделать то же самое с более интерсекциональными утверждениями? Например, могу ли я адресовать строки со 2 по 6 вместо последних пяти компонентов в массиве? Попытка использовать оператор AND для маски не удалась, и я не могу использовать между значениями индекса фрейма данных.


person CAB    schedule 26.06.2017    source источник


Ответы (1)


Я думаю, вы можете использовать mask в основном, если значения индекса дублируются.

Поэтому, если вы хотите использовать between, работая только с Series, можно использовать to_series или Series конструктор.

mask = df.index.to_series().between(2,6)
#mask = pd.Series(df.index, index=df.index).between(2,6)
print (mask)
0    False
1    False
2     True
3     True
4     True
5     True
6     True
7    False
8    False
9    False
dtype: bool

mask = df.index.to_series().between(2,6).values
print (mask)
[False False  True  True  True  True  True False False False]

Или цепочка условий с &:

mask = (df.index >= 2) & (df.index <= 6)
print (mask)
[False False  True  True  True  True  True False False False]

Но, возможно, лучше использовать loc, если он уникален. монотонный показатель:

df.loc[2:6, 0] = range(5)
print (df)
          0
0  0.642933
1  0.912846
2  0.000000
3  1.000000
4  2.000000
5  3.000000
6  4.000000
7  0.504830
8  0.000422
9  0.029358
person jezrael    schedule 26.06.2017