Написание последовательности формул в Excel с Python - PullRequest
0 голосов
/ 31 мая 2018

Я манипулирую некоторыми файлами Excel, объединяю их и вычисляю балансы.Поскольку после выполнения сценария могут потребоваться некоторые изменения, я предпочитаю формулу для баланса над вычисленной суммой (это уже работает).Поэтому мне нужен python для создания формул, которые я помещу в столбец панд и заменим старый столбец новым.Теперь я не понимаю, как создать следующее:

=IF(Q3="some text",W2,W2+U3))

=IF(Q4="some text",W3,W3+U4))

и т. Д.

Эта формула работает в Excel.

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете определить функцию, которая принимает индекс и возвращает строку, представляющую формулу.Один из способов сделать это с помощью str.format примерно так:

import pandas as pd

df = pd.DataFrame(np.random.rand(10, 4))
df.columns = [c for c in "ABCD"]


def i2str(i):
    return '=IF(A{1}="some text",B{0},C{0}+D{1}))'.format(i, i + 1)


df["E"] = (df.index + 1).map(i2str)

          # A         B         C         D                                  E
# 0  0.076411  0.200761  0.309738  0.088941      =IF(A2="some text",B1,C1+D2))
# 1  0.336796  0.721301  0.037390  0.816526      =IF(A3="some text",B2,C2+D3))
# 2  0.595759  0.909850  0.242617  0.590498      =IF(A4="some text",B3,C3+D4))
# 3  0.966616  0.005933  0.866219  0.416781      =IF(A5="some text",B4,C4+D5))
# 4  0.554771  0.804761  0.086853  0.641952      =IF(A6="some text",B5,C5+D6))
# 5  0.908722  0.042198  0.930092  0.327798      =IF(A7="some text",B6,C6+D7))
# 6  0.156592  0.402616  0.748740  0.601990      =IF(A8="some text",B7,C7+D8))
# 7  0.671168  0.239831  0.744886  0.497128      =IF(A9="some text",B8,C8+D9))
# 8  0.017318  0.773414  0.133034  0.167445    =IF(A10="some text",B9,C9+D10))
# 9  0.954062  0.849017  0.732924  0.310983  =IF(A11="some text",B10,C10+D11))
...