Фильтр DataFrame того же типа по значению - PullRequest
0 голосов
/ 08 июня 2018

У меня есть DataFrame, чтобы по существу связать Type1 и Type2, а df[t1][t2] всегда возвращает состояние типа State.Содержимое DataFrame предполагает, что я должен просто использовать массив numpy, но мне нужно иметь возможность индексировать его как словарь, поэтому я использую DataFrame.Если есть лучший способ создать это, пожалуйста, дайте мне знать.

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

row = df[type1]
row[row == state]

Но как мне отфильтровать всю DataFrame?

1 Ответ

0 голосов
/ 08 июня 2018

Я предлагаю изменить формат на MultiTndex Series:

np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
print (df)
   A  B  C
0  8  8  3
1  7  7  0
2  4  2  5

a = df.stack()
print (a)
0  A    8
   B    8
   C    3
1  A    7
   B    7
   C    0
2  A    4
   B    2
   C    5
dtype: int32

b = a[a == 8].index.remove_unused_levels().tolist()
print (b)
[(0, 'A'), (0, 'B')]

РЕДАКТИРОВАТЬ:

Для повышения производительности возможно использовать numpy.where для индексов совпадающих значений изатем zip проиндексировал индекс и имена столбцов для кортежей:

np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
print (df)
   A  B  C
0  8  8  3
1  7  7  0
2  4  2  5

a =  np.where(df == 8)
print (a)
(array([0, 0], dtype=int64), array([0, 1], dtype=int64))

b = list(zip(df.index[a[0]], df.columns[a[1]]))
print (b)
[(0, 'A'), (0, 'B')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...