У меня есть список значений с индексом столбца, который я хочу для каждой строки в панде DataFrame. Как мне сопоставить этот список меток столбцов с каждой строкой DataFrame?
Если я просто проиндексирую DataFrame, используя список, весь список будет применен к каждой строке, как это.
In [10]: df = pd.DataFrame(np.random.randn(5,2), columns=list('AB'))
In [11]: df
Out[11]:
A B
0 -0.082240 -2.182937
1 0.380396 0.084844
2 0.432390 1.519970
3 -0.493662 0.600178
4 0.274230 0.132885
In[12]: selection = list('ABBAA')
In[13]: selection
Out[13]: ['A', 'B', 'B', 'A', 'A']
In[14]: df[selection]
Out[14]:
A B B A A
0 -0.082240 -2.182937 -2.182937 -0.082240 -0.082240
1 0.380396 0.084844 0.084844 0.380396 0.380396
2 0.432390 1.519970 1.519970 0.432390 0.432390
3 -0.493662 0.600178 0.600178 -0.493662 -0.493662
4 0.274230 0.132885 0.132885 0.274230 0.274230
Каждый элемент в списке выбора указывает столбец для выбора из соответствующей строки в кадре данных. В этом примере я хочу столбец A
из первого ряда, B
из второго и третьего, затем A
из четвертого и пятого. Получается, что это диагональ вышеприведенного результата. Мой фактический DataFrame намного больше, и я не думаю, что имеет смысл строить приведенный выше результат просто для выбора диагонали.
Конечно, я могу достичь этого, циклически перебирая строки, но я ожидаю, что у Панд есть встроенный способ сделать это. Я ищу метод, чтобы получить следующий результат.
In[15]: df <do something> selection
Out[15]:
0 -0.082240
1 0.084844
2 1.519970
3 -0.493662
4 0.274230