回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有三个数据集(<code>final_NN</code>,<code>ppt_code</code>,<code>herd_id</code>),我希望在<code>final_NN</code>数据帧中添加一个名为<code>MapValue</code>的新列,要添加的值可以从其他两个数据帧中检索,规则在代码后的底部</p>
<pre><code>import pandas as pd
final_NN = pd.DataFrame({
"number": [123, 456, "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"],
"ID": ["", "", "", "", "", "", "", "", 799, 813],
"code": ["", "", "AA", "AA", "BB", "BB", "BB", "CC", "", ""]
})
ppt_code = pd.DataFrame({
"code": ["AA", "AA", "BB", "BB", "CC"],
"number": [11, 11, 22, 22, 33]
})
herd_id = pd.DataFrame({
"ID": [799, 813],
"number": [678, 789]
})
new_column = pd.Series([])
for i in range(len(final_NN)):
if final_NN["number"][i] != "" and final_NN["number"][i] != "Unknown":
new_column[i] = final_NN['number'][i]
elif final_NN["code"][i] != "":
for p in range(len(ppt_code)):
if ppt_code["code"][p] == final_NN["code"][i]:
new_column[i] = ppt_code["number"][p]
elif final_NN["ID"][i] != "":
for h in range(len(herd_id)):
if herd_id["ID"][h] == final_NN["ID"][i]:
new_column[i] = herd_id["number"][h]
else:
new_column[i] = ""
final_NN.insert(3, "MapValue", new_column)
print(final_NN)
</code></pre>
<p>最后:</p>
<pre><code> number ID code
0 123
1 456
2 Unknown AA
3 Unknown AA
4 Unknown BB
5 Unknown BB
6 Unknown BB
7 Unknown CC
8 Unknown 799
9 Unknown 813
</code></pre>
<p>ppt_代码:</p>
<pre><code> code number
0 AA 11
1 AA 11
2 BB 22
3 BB 22
4 CC 33
</code></pre>
<p>兽群识别码:</p>
<pre><code> ID number
0 799 678
1 813 789
</code></pre>
<p>预期产出:</p>
<pre><code> number ID code MapValue
0 123 123
1 456 456
2 Unknown AA 11
3 Unknown AA 11
4 Unknown BB 22
5 Unknown BB 22
6 Unknown BB 22
7 Unknown CC 33
8 Unknown 799 678
9 Unknown 813 789
</code></pre>
<p>规则是:</p>
<ol>
<li>如果final_NN中的<code>number</code>不是<code>Unknown</code>,则<code>MapValue</code>=<code>number</code>在<code>final_NN</code>中</李>
<li>如果final_NN中的<code>number</code>为<code>Unknown</code>,但<code>final_NN</code>中的<code>code</code>不为空,则搜索ppt_代码数据帧,并使用<code>code</code>及其对应的“编号”映射并填写<code>final_NN</code>中的“映射值”</李>
<li>如果{<cd6>}中的{<cd6>}和{<cd13>}分别为{<cd7>}和null,但{<cd1>}中的{<cd21>}不为null,则搜索{<cd3>}数据帧,并使用{<cd21>}及其对应的{<cd6>}填充第一个数据帧中的{<cd4>}。我在数据帧中应用了一个循环,这是实现这一点的一个缓慢的方法,如上所述。但我知道有一种更快的方法可以做到这一点。我只是想知道有没有人能帮我找到一种快速简便的方法来达到同样的效果</李>
</ol>