Arhn - архитектура программирования

Разделите один кадр данных на другой, не учитывая один столбец

У меня есть два фрейма данных:

df1:
      Produtos       Jan       Feb       Mar       Apr       May       Jun  \
0          100   15884.0    8194.0   41070.0    8294.0   17308.0   18146.0   
1        10057       0.0       0.0       0.0   24900.0       0.0       0.0   
2        10058       0.0       0.0       0.0   30900.0       0.0       0.0   
3        10236   11638.0    8450.0    1690.0    3380.0   10140.0    1690.0   
4        10267       0.0       0.0       0.0   11490.0       0.0       0.0   
5        10273   18157.0   32434.0    4900.0       0.0   10588.0   15094.0 


df2:
      Produtos     Jan     Feb     Mar     Apr     May     Jun     Jul     Aug
0          100   600.0   200.0  1100.0   300.0   500.0  1600.0     0.0     0.0
1        10057     0.0     0.0     0.0   100.0     0.0     0.0     0.0     0.0
2        10058     0.0     0.0     0.0   100.0     0.0     0.0     0.0     0.0
3        10236   700.0   500.0   100.0   200.0   600.0   100.0   200.0   100.0
4        10267     0.0     0.0     0.0   100.0     0.0     0.0     0.0     0.0
5        10273   400.0   700.0   100.0     0.0   200.0   300.0   300.0   300.0

Я пытаюсь разделить один кадр данных на другой, чтобы создать новый. Однако я не знаю, как сделать это деление без учета первой колонки «Produtos».

Делая это:

v = df1.values / df2.values

Я также разделяю первый столбец.


  • Я думаю, что ответы здесь должны быть полезными. 16.08.2018

Ответы:


1

Если вы знаете, что форма вашего фрейма данных и серия Produtos выровнены, вы можете использовать NumPy следующим образом:

df1.iloc[:, 1:] /= df2.iloc[:, 1:].values

print(df1)

   Produtos        Jan        Feb        Mar         Apr     May        Jun
0       100  26.473333  40.970000  37.336364   27.646667  34.616  11.341250
1     10057        NaN        NaN        NaN  249.000000     NaN        NaN
2     10058        NaN        NaN        NaN  309.000000     NaN        NaN
3     10236  16.625714  16.900000  16.900000   16.900000  16.900  16.900000
4     10267        NaN        NaN        NaN  114.900000     NaN        NaN
5     10273  45.392500  46.334286  49.000000         NaN  52.940  50.313333
16.08.2018

2

У вас возникнут проблемы с делением на 0, что приведет к значениям NaN, но при условии, что столбцы Produtos равны (как в вашем вопросе), вы можете установить для этого столбца индекс, а затем использовать .div:

df1.set_index('Produtos').div(df2.set_index('Produtos'))

                 Apr  Aug        Feb        Jan  Jul        Jun        Mar  \
Produtos                                                                     
100        27.646667  NaN  40.970000  26.473333  NaN  11.341250  37.336364   
10057     249.000000  NaN        NaN        NaN  NaN        NaN        NaN   
10058     309.000000  NaN        NaN        NaN  NaN        NaN        NaN   
10236      16.900000  NaN  16.900000  16.625714  NaN  16.900000  16.900000   
10267     114.900000  NaN        NaN        NaN  NaN        NaN        NaN   
10273            NaN  NaN  46.334286  45.392500  NaN  50.313333  49.000000   

             May  
Produtos          
100       34.616  
10057        NaN  
10058        NaN  
10236     16.900  
10267        NaN  
10273     52.940  

Если они не всегда равны, и вы просто хотите разделить соответствующие порядковые номера, используйте drop('Produtos',1):

>>> df1.drop('Produtos',1).div(df2.drop('Produtos',1))
          Apr  Aug        Feb        Jan  Jul        Jun        Mar     May
0   27.646667  NaN  40.970000  26.473333  NaN  11.341250  37.336364  34.616
1  249.000000  NaN        NaN        NaN  NaN        NaN        NaN     NaN
2  309.000000  NaN        NaN        NaN  NaN        NaN        NaN     NaN
3   16.900000  NaN  16.900000  16.625714  NaN  16.900000  16.900000  16.900
4  114.900000  NaN        NaN        NaN  NaN        NaN        NaN     NaN
5         NaN  NaN  46.334286  45.392500  NaN  50.313333  49.000000  52.940
16.08.2018

3

Вы можете использовать iloc, чтобы игнорировать первый столбец в каждом фрейме данных и разделить результат.

>>> df1.iloc[:, 1:].div(df2.iloc[:, 1:])[df1.columns[1:]]

         Jan        Feb        Mar         Apr     May        Jun
0  26.473333  40.970000  37.336364   27.646667  34.616  11.341250
1        NaN        NaN        NaN  249.000000     NaN        NaN
2        NaN        NaN        NaN  309.000000     NaN        NaN
3  16.625714  16.900000  16.900000   16.900000  16.900  16.900000
4        NaN        NaN        NaN  114.900000     NaN        NaN
5  45.392500  46.334286  49.000000         NaN  52.940  50.313333
16.08.2018
  • Я не вижу ожидаемого результата, поэтому не уверен, что это предположение верно. Если да, то его легко включить. 16.08.2018
  • Вы правы, я ошибочно подумал, что второй DataFrame был желаемым результатом, но все же я думаю, что имеет смысл включить первый столбец. 16.08.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..