2015-01-05 3 views
1

У меня есть кадр данных 8r x 10c, и я хочу дублировать DataFrame, деля значения в каждой строке на первое значение в своем столбце (т.е. «индексирование» каждого столбца, с первое значение = 100).Индексирующие значения строк на основе значения каждой колонки

Так что, если я начну с ...

ColA ColB ColC 
1000 2000 3000 
2000 3000 9000 

Он вернется ...

ColA ColB ColC 
100 100 100 
200 150 300 

Есть простая команда, чтобы сделать это, или это какой-то цикл?

+2

Когда вы говорите «кадр данных», вы имеете в виду ['pandas.DataFrame'] (http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.html)? Если вы используете какую-либо другую структуру данных, сообщите нам, что это такое (список списков, массив NumPy и т. Д.). – NPE

+0

К сожалению, да - рамка данных Pandas. – WDCR

+0

Первый столбец в вашем примере был разделен на 10 ... если он не был разделен на 1000 (так как это первое значение в столбце)? –

ответ

0

Вы можете сделать следующее:

>>> df/(df.iloc[0]/100) 
    ColA ColB ColC 
0 100 100 100 
1 200 150 300 

df.iloc[0] выбирает первую строку. Разделите его на 100, чтобы получить ряд значений, чтобы настроить каждый столбец. Наконец, мы разделим весь DataFrame на эту новую строку значений. По умолчанию деление происходит по оси 0 (т. Е. Вниз вдоль каждого столбца).

Эквивалентная операция будет df/df.iloc[0] * 100.

+0

Фантастический - спасибо. Знал, что должен быть простой способ сделать это. – WDCR

+0

iloc работает, чтобы выбрать первую строку, но разделение не выполняется. Я собираюсь предположить, что это моя нехватка знаний на Python и что я упускаю что-то очевидное, но если кто-нибудь знает причину, это не сработает, как показано, пожалуйста, дайте мне знать. – WDCR

+0

@WDCR: появляется ли у вас сообщение об ошибке при попытке деления? –

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