2015-10-29 1 views
1

Моя CSV-файл содержит столбцы, такие как:Как использовать столбец ввода в качестве основного индекса в иерархической индексации в пандах?

col1 col2 

1  0.9 
1  0.3 
2  0.4 
2  0.9 
2  0.1 
3  0.0 
4  0.5 
4  0.9 

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

ID  col1 col2 

1  1  0.9 
     2  0.3 
2  1  0.4 
     2  0.9 
     3  0.1 
3  1  0.0 
4  1  0.5 
     2  0.9 

Как мне это сделать?

Моя конечная цель состоит в том, чтобы устранить строки определенного основного идентификатора. Например, если среднее значение строк в Major ID 4 меньше 0,5, я удалю эти строки.

Я предполагаю, что лучший способ - использовать основной индекс, но если есть лучший способ, пожалуйста, дайте мне знать.

ответ

1

Во-первых, вы можете создать столбец ID с вашего col1, а затем отказаться от col1.

Затем вы можете использовать DataFrame.groupby, на колонке ID, а затем использовать .cumcount(), чтобы получить нужный результат. Пример -

df['ID'] = df['col1'] 
df = df.drop('col1',axis=1) 
df['col1'] = (df.groupby('ID').cumcount() + 1) 

Demo -

In [20]: df 
Out[20]: 
    col1 col2 
0  1 0.9 
1  1 0.3 
2  2 0.4 
3  2 0.9 
4  2 0.1 
5  3 0.0 
6  4 0.5 
7  4 0.9 

In [21]: df['ID'] = df['col1'] 

In [23]: df = df.drop('col1',axis=1) 

In [24]: df['col1'] = (df.groupby('ID').cumcount() + 1) 

In [25]: df 
Out[25]: 
    col2 ID col1 
0 0.9 1  1 
1 0.3 1  2 
2 0.4 2  1 
3 0.9 2  2 
4 0.1 2  3 
5 0.0 3  1 
6 0.5 4  1 
7 0.9 4  2 

После этого, если вы хотите id как индекс, вы можете использовать метод .set_index() проходящее 'ID' в качестве параметра.

+0

Это круто! Благодарю. Но даже если я добавлю этот индекс, используя 'set_index', как вы сказали, как мне легко выбрать все строки этого основного индекса? то есть в моем вопросе, скажем, я хотел бы выбрать все строки основного индекса '1'? – Candic3

Смежные вопросы