Slice Pandas DataFrame by Row
Я работаю с данными опроса, загруженными из h5 файла, как hdf = pandas.HDFStore('Survey.h5')
через пакет pandas. Внутри этого DataFrame
все строки являются результатами одного опроса, тогда как столбцы являются ответами на все вопросы в рамках одного опроса.
Я собираюсь уменьшить этот набор данных до меньшего DataFrame
, включая только строки с определенным изображенным ответом по определенному вопросу, т.е. со всем тем же значением в этом столбце. Я могу определить значения индекса для всех строк с этим условием, но я не могу найти, как удалить эти строки или создать новый df только с этими строками.
Ответы
Ответ 1
In [36]: df
Out[36]:
A B C D
a 0 2 6 0
b 6 1 5 2
c 0 2 6 0
d 9 3 2 2
In [37]: rows
Out[37]: ['a', 'c']
In [38]: df.drop(rows)
Out[38]:
A B C D
b 6 1 5 2
d 9 3 2 2
In [39]: df[~((df.A == 0) & (df.B == 2) & (df.C == 6) & (df.D == 0))]
Out[39]:
A B C D
b 6 1 5 2
d 9 3 2 2
In [40]: df.ix[rows]
Out[40]:
A B C D
a 0 2 6 0
c 0 2 6 0
In [41]: df[((df.A == 0) & (df.B == 2) & (df.C == 6) & (df.D == 0))]
Out[41]:
A B C D
a 0 2 6 0
c 0 2 6 0
Ответ 2
Если вы уже знаете индекс, вы можете использовать .loc
:
In [12]: df = pd.DataFrame({"a": [1,2,3,4,5], "b": [4,5,6,7,8]})
In [13]: df
Out[13]:
a b
0 1 4
1 2 5
2 3 6
3 4 7
4 5 8
In [14]: df.loc[[0,2,4]]
Out[14]:
a b
0 1 4
2 3 6
4 5 8
In [15]: df.loc[1:3]
Out[15]:
a b
1 2 5
2 3 6
3 4 7