假设我有这样一个数据帧
20 28 25 19 2 4 22
E 4 =E19*E20*E22 =E2*E4 0.001 860 0.80 =SUM(D22:D28)
D 4 =D19*D20*D22 =D2*D4 0.001 880 0.80 =SUM(C22:C28)
C 3 =C19*C20*C22 =C2*C4 0.001 900 0.90 =SUM(B22:B28)
F 3 =F19*F20*F22 =F2*F4 0.001 840 0.70 =SUM(E22:E28)
B 4 =B19*B20*B22 =B2*B4 0.001 1000 0.95 0
G 4 =G19*G20*G22 =G2*G4 0.002 800 0.60 =SUM(F22:F28)
我需要计算公式,然后把它放回同一行,同一列。例如E25
的值为"=E2*E4"
,我需要计算E2
和E4
并将其放回E25
。你知道吗
我怎样才能做到这一点?你知道吗
这是目前为止的代码
import re
d = {
"B2": 1000,
"C2": 900,
"D2": 880,
"E2": 860,
"F2": 840,
"G2": 800,
"B4": 0.95,
"C4": 0.90,
"D4": 0.80,
"E4": 0.80,
"F4": 0.70,
"G4": 0.60,
"B19": 0.001,
"C19": 0.001,
"D19": 0.001,
"E19": 0.001,
"F19": 0.001,
"G19": 0.002,
"B20": 4,
"C20": 3,
"D20": 4,
"E20": 4,
"F20": 3,
"G20": 4,
"B25": "=B2*B4",
"C25": "=C2*C4",
"D25": "=D2*D4",
"E25": "=E2*E4",
"F25": "=F2*F4",
"G25": "=G2*G4",
"B22": 0,
"C22": "=SUM(B22:B28)",
"D22": "=SUM(C22:C28)",
"E22": "=SUM(D22:D28)",
"F22": "=SUM(E22:E28)",
"G22": "=SUM(F22:F28)",
"B28": "=B19*B20*B22",
"C28": "=C19*C20*C22",
"D28": "=D19*D20*D22",
"E28": "=E19*E20*E22",
"F28": "=F19*F20*F22",
"G28": "=G19*G20*G22",
}
a = list()
def split_inp(inp):
return re.match(r"([a-z]+)([0-9]+)", inp, re.I)
for k, v in d.items():
match = split_inp(k)
a.append((match.groups(), v))
import pandas as pd
df = pd.DataFrame()
formula_ = []
for i, j in a:
if isinstance(j, str) and j.startswith('=') and not j[1:].startswith('S'):
formula_.append((i, j))
df.set_value(i[0], i[1], j)
print(df)
operators = ['+', '-', '/', '*']
print(formula_)
def split_op(inp):
for i in operators:
if i in inp:
return inp.partition(i)
for i, j in formula_:
j = j[1:]
match = split_op(j)
print(match)
g = split_inp(match[0])
f = split_inp((match[2]))
new = (g.groups(), match[1], f.groups())
# print(new)
# df.set_value(i[0], [1], df.query(new[0][0], new[]))
# if isinstance(j, str) and j.startswith('=') and not j[1:].startswith('S'):
# j = j[1:]
# print(j)
# df.set_value(i[0], i[1], pd.eval(j))
# else:
# pass
目前没有回答
相关问题 更多 >
编程相关推荐