我有一个多索引数据框,我想在其中使用另一列的信息将函数应用于一列。以下是一些示例数据:
ind pos log
x y z
33.0 7.0 0.0 21 (997.232, 217.786, 26.6823) [1, 0, 0]
0.0 22 (992.761, 217.274, 26.6758) [1, 0, 0]
0.0 23 (998.916, 217.354, 27.9557) [1, 0, 0]
2.0 33.0 2.0 63 (66.6064, 999.717, 70.8408) [0, 1, 0]
2.0 64 (65.7294, 999.793, 72.4056) [0, 1, 0]
我要申请这个功能
pos - 1000*log
到数据框的每一行。解决此问题的最佳方法是什么?
最佳答案
不要像其他答案所暗示的那样使用apply
。您应该改为将这些列提取为新的 DataFrame 并对它们执行矢量化算术。
i = pd.DataFrame(df['pos'].tolist())
j = pd.DataFrame(df['log'].tolist())
...或者您也可以使用 numpy 数组来做同样的事情:
i = np.array(df['pos'].tolist())
j = np.array(df['log'].tolist())
df['result'] = (i - 1000 * j).tolist()
作为旁注,请考虑将列表/可迭代对象的每一列分成具有单个标量值的多列。性能很重要,对于对象列,你最终会扼杀性能,除非你使用技巧(就像在这篇文章中),或者使用根本无法缩放的缓慢循环应用函数。
关于python - 使用 Pandas 从列表的一列中减去另一列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51405985/