我真的很难理解 pandas.merge 中的“left_index”和“right_index”参数。我阅读了文档,四处搜索,尝试了各种设置并试图理解,但我仍然感到困惑。考虑这个例子:
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3'],
'E': [1,2,3,4]})
Run Code Online (Sandbox Code Playgroud)
现在,当我运行以下命令时:
pd.merge(left, right, left_on=['key2', 'key1'], right_on=['key1', 'key2'], how='outer', indicator=True, left_index=True)
Run Code Online (Sandbox Code Playgroud)
我得到:
key1_x key2_x A B key1_y key2_y C D E _merge
0 K0 K0 A0 B0 K0 K0 C0 D0 1.0 …Run Code Online (Sandbox Code Playgroud) 因此,我使用带有 +atomic 标志的 wasm/rust 时内存不足,想检查实际可用的内存量。这是我的粗略的最小工作示例,它在向量发生恐慌之前记录其内存:
索引.js
import init from './pkg/test1.js';
import * as wasm_test1 from './pkg/test1.js';
async function run() {
await init();
let newDiv = document.createElement("div");
let btn = document.createElement("button");
btn.innerHTML = "Max out the memory now and panic!";
document.body.appendChild(btn);
btn.onclick = function () {
wasm_test1.fill_memory();
};
}
run();
Run Code Online (Sandbox Code Playgroud)
库文件
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = console)]
fn log(s: &str);
}
#[wasm_bindgen]
pub fn fill_memory() {
let mut v = Vec::new();
for i in 1..1000000000 {
v.push(0);
if …Run Code Online (Sandbox Code Playgroud) 当尝试运行以下代码时:
fn main() {
let s1 = String::from("hello world");
println!("The first word in the string is: {}", return_first_word(&s1));
}
fn return_first_word(s: &String) -> String {
let t = s.split(" ");
String::from(t.next().unwrap())
}
Run Code Online (Sandbox Code Playgroud)
我收到错误cannot borrow as mutable消息String::from(t.next().unwrap())。当然,当我let t = ...用以下内容替换该行时let mut t = ...代码替换该行时效果很好。
我的问题是,有人可以解释为什么吗?这里借了什么,借了什么?我检查了新创建的不可变变量的类型t,它是一个迭代器。为什么迭代迭代器会出现问题?