Как добавить базовые значения в разные группы в python? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть набор данных, в котором у меня есть разные группы, которые выглядят так:

A           B
Base1      100  
MemberA    Base1+1
MemberB    Base1+2
Base2      250
MemberC    Base2+1
MemberD    Base2+2
etc.

Я создал новые столбцы с pandas (df), которые содержат имена групп и значения для быть добавлен к базе, а также тот, который показывает, есть ли «+» в ячейке (col.B) (позиция) или нет (-1). Я также сохранил его как файл Excel, который я открыл с помощью pyodb c.

A           B           c           D     E
Base1      100         Nan         Nan    -1
MemberA    Base1+1     Base1        1     5
MemberB    Base1+2     Base1        2     5
Base2      250         Nan         Nan    -1
MemberC    Base2+1     Base2        1     5
MemberD    Base2+2     Base2        2     5
etc.

Я хочу создать еще один столбец (F), в котором базовые значения добавляются к числам в столбце. D, а затем сохраните его как файл Excel.

A           B           c           D        E      F
Base1      100         Nan         Nan       -1    Nan
MemberA    Base1+1     Base1        1         5    101
MemberB    Base1+2     Base1        2         5    102
Base2      250         Nan         Nan       -1    Nan
MemberC    Base2+1     Base2        1         5    251
MemberD    Base2+2     Base2        2         5    252
etc.

Я попытался решить его с помощью pyodb c следующим образом:

crsr.exeute("SELECT C FROM Table WHERE E > 0")
    for row in crsr.fethcall():
        crsr.execute("SELECT B FROM Table WHERE A=?", row)
        while True:
          row=crsr.fetchone()
          if row==None:
            break
          else:
            initial= row
            value = initial + D

, но он дает только значения D для последней группы базовая стоимость. Спасибо за помощь!

1 Ответ

0 голосов
/ 26 марта 2020

Тем временем я нашел решение. Не самый лучший, но он работает для меня.

listA=[]
crsr.exeute("SELECT C FROM Table WHERE E > 0")
    for row in crsr.fethcall():
        crsr.execute("SELECT B FROM Table WHERE A=?", row)
        while True:
          row2=crsr.fetchone()
          if row==None:
            break
          else:
            row2=pd.to_numeric(row2)
            crsr.execute("SELECT D FROM Table WHERE C=?",row)
            while True:
                row3=crsr.fetchone()
                if row3==None:
                   break
                else:
                   listA.extend(row2)
                   row3=pd.to_numeric(row3)
                   value= row3 + row2
                   listA.extend(value)
listA=list(dict.fromkeys(listA))
Table["F"]=listA

И я получаю такой результат:

A           B           c           D        E      F
Base1      100         Nan         Nan       -1    100
MemberA    Base1+1     Base1        1         5    101
MemberB    Base1+2     Base1        2         5    102
Base2      250         Nan         Nan       -1    250
MemberC    Base2+1     Base2        1         5    251
MemberD    Base2+2     Base2        2         5    252
etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...