【发布时间】:2021-04-11 14:50:29
【问题描述】:
我目前有一个 Datafame,如下所示:
| Account1 | Account2 | Name | Surname |
|---|---|---|---|
| 150 | 18 | Peter | Müller |
| 130 | 1200 | Hans | Zimmer |
| 150 | 18 | Franz | Joseph |
| 106 | 1200 | Joe | Trump |
| 150 | 18 | Christoph | Walz |
| 170 | 1200 | Anne | Will |
| 150 | 138 | Lucenci | Hart |
| 1056 | 1200 | Defig | Iano |
我现在正试图找到一个值m,它会为函数带来完美的解决方案:
for x in range(len(data)):
Account1 = data.loc[x, 'Account1']
Account2 = data.loc[x, 'Account2']
m = 1
a = np.array([[-Account2 - m * Account1]])
b = np.array([[-Account2 * Account1 + (Account1 ** 2) * m]])
solution = ((np.linalg.solve(a, b)))
data.loc[x, "m_solution"] = solution[0]
这样它就会返回:
| m_solution |
|---|
| -117.857 |
| 104.586 |
| -117.857 |
| 88.793 |
| -117.857 |
| 127.810 |
| -6.25 |
| 67.404 |
这确实工作得很好,但是对于超过 50000 行的 df,它需要很长时间。
有没有办法使用 lambda 之类的东西来优化这个问题,或者可能已经有 pandas 函数可以立即解决这样的问题?
【问题讨论】:
-
我是否正确推断
a和b都是 (1,1) 数组?所以第一个数字就是(-18*150+(150**2)*1)/(-18-1*150)?为什么用linsolve做简单的除法? -
尝试设置
Account1 = data['Account1']等,一次对所有行进行上述计算。我认为您不需要迭代行,也不需要使用linsolve。这只是根据两个系列的值进行的简单计算。
标签: python pandas numpy lambda