Разрезать Pandas DataFrame по строке

Я работаю с данными опроса, загруженными из файла h5 как hdf = pandas.HDFStore('Survey.h5') через пакет pandas. В этом DataFrame все строки представляют собой результаты одного опроса, тогда как столбцы представляют собой ответы на все вопросы в рамках одного опроса.

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


person ruben baetens    schedule 09.08.2012    source источник


Ответы (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
person Akavall    schedule 11.12.2016
comment
Стоит отметить, что, несмотря на сходство обозначений между df.loc[1:3] и some_list[1:3], первый использует инклюзивный верхний индекс, а второй (и большая часть python) использует эксклюзивный верхний индекс. - person Phoenix Meadowlark; 21.02.2020

person    schedule
comment
можно ли разрезать кадр данных и сказать (c = 5 или c = 6), как ЭТО: ---> df[((df.A == 0) & (df.B == 2) & (df.C == 5 или 6) & (df.D == 0))] - person yoshiserry; 05.12.2014
comment
df[((df.A == 0) & (df.B == 2) & df.C.isin([5, 6]) & (df.D == 0))] или df[((df .A == 0) & (df.B == 2) & ((df.C == 5) | (df.C == 6)) & (df.D == 0))] - person Wouter Overmeire; 05.12.2014