我有三个具有相同列的 Pandas 数据框,如下所示:
df1 = pandas.DataFrame(data = {'A' : ["a", "b", "c", "d", "e"], 'B' : [[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5]], 'C' : [10, 11, 12, 13, 14]})
df2 = pandas.DataFrame(data = {'A' : ["a", "b", "c"], 'B' : [[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5]], 'C' : [30, 31, 32]})
df3 = pandas.DataFrame(data = {'A' : ["a", "b", "c", "d"], 'B' : [[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5],[0.1, 0.2, 0.3, 0.4, 0.5]], 'C' : [50, 51, 52, 53]})
我有第四个数据帧,其中行数对应于我拥有的数据帧数,所以这里我有 3 行,然后是 3 个数据帧。
dfZ = pandas.DataFrame(data = {'Z' : [1, 2, 3]})
我要做的是计算第四列,它基本上是 C 列除以 B 列。我希望从 B 列每一行的值列表中选择每行一个值。并且该值应该是用于所有数据帧(意味着如果我为索引“a”选择 0.5,那么该值应用于索引为“a”的所有数据帧。但选择需要满足这些条件
df1.sum() == dfZ['Z'].iloc[0] # tolerence 10 to 20%
df2.sum() == dfZ['Z'].iloc[1] # tolerence 10 to 20%
df2.sum() == dfZ['Z'].iloc[2] # tolerence 10 to 20%
环顾四周似乎是一个优化问题,但我不知道如何使用 SciPy 来解决它。