我有以下 Dataframe :
data = {'id':[xxx, xxy, xxz, xyx, xzy],
'Total_I':[4796.6, 170637.53, 782.64, 449.12, 25654.02],
'SumImp_RP':[3658.75, 0, 0, 0, 21530.45],
'Total_E':[1137.84, 170637.56, 1565.26, 449.11, 8501.18],
'Egre_E':[980.9, 130901.29, 674.69, 387.17, 1532.76],
'ImpEgre_E':[156.94, 20944.27, 107.94000000000001, 61.94, 245.24],
'Desc_E':[1137.84, 151845.56, 782.63, 449.11, 1778],
}
df = pd.DataFrame(data)
字符串
通过下面的代码,我获得了余额和balance 2。
dfLim[["Desc_E", "Total_E", "Total_I", "SumImp_RP"]] = dfLim[["Desc_E", "Total_E", "Total_I", "SumImp_RP"]].astype(float)
dfLim['SalIns2'] = dfLim.loc[(dfLim.Desc_E< dfLim.Total_E) & dfLim.TotalEgresos_E <= dfLim.Total_I) & ((dfLim.SumImp_RP + dfLim.TotalEgresos_E) <= dfLim.Total_I)].eval('(Total_E + SumImp_RP) - Total_I')
dfLim['SalIns'] = (dfLim.Total_I - (dfLim.SumImp_RP + dfLim.Desc_E))
型
我得到以下结果:
| ID|共计一|SumImp_RP| E共计|埃格雷_E| ImpEgre_E|描述_E| SalIns2|萨林斯|
| --|--|--|--|--|--|--|--|--|
| xxx| 4796.6|三六五八点七五|一千一百三十七点八四|九百八十点九|一百五十六点九四|一千一百三十七点八四||零点零一|
| XXY| 170637.53| 0 |170637.56| 130901.29| 20944.27| 151845.56||18791.97|
| XXZ| 782.64| 0 |1565.26| 674.69|一百零七点九四|782.63||零点零一|
| XYX|四百四十九点一二| 0 |449.11| 387.17|六十一点九四|449.11||零点零一|
| XZY| 25654.02| 21530.45| 8501.18| 1532.76|二百四十五点二十四| 1778 ||2345.57|
但这并不是我想要的,我想找到一种方法,使Total_E尽可能接近Total_I,因为有时Total_E可能大于Total_I,这也是正确的。
此外,如果我能得到萨林斯和SalIns 2在一个单一的列,这将是非常好的。
我尝试过以下方法,但都不管用:
dfLim['diff'] = abs((dfLim['SumImp_RP'] + dfLim['Total_E ']) - dfLim['Total_I'])
mask = (dfLim['Desc_E'] < dfLim['Total_E ']) & \
(dfLim['Total_E '] <= dfLim['Total_I']) & \
(dfLim['diff'] <= 0.1)
dfLim['SalIns2'] = dfLim.loc[mask].eval('(Total_E + SumImp_RP) - Total_I')
dfLim = dfLim.drop(columns=['diff'])
型
这一部分对我来说也产生了同样的结果。
这是我所期待的结果:
| ID|共计一|SumImp_RP| E共计|埃格雷_E| ImpEgre_E|描述_E|萨林斯|
| --|--|--|--|--|--|--|--|
| xxx| 4796.6|三六五八点七五|一千一百三十七点八四|九百八十点九|一百五十六点九四|一千一百三十七点八四|零点零一|
| XXY| 170637.53| 0 |170637.56| 130901.29| 20944.27| 151845.56| -0.03 |
| XXZ| 782.64| 0 |1565.26| 674.69|一百零七点九四|782.63|零点零一|
| XYX|四百四十九点一二| 0 |449.11| 387.17|六十一点九四|449.11|零点零一|
| XZY| 25654.02| 21530.45| 8501.18| 1532.76|二百四十五点二十四| 1778 |2345.57|
1条答案
按热度按时间pbossiut1#
你可以测试一些组合,并保持这些最小化的差异:
字符串
输出量:
型