<p>我认为关键在于首先为目标xml表示更好地构建数据</p>
<ol>
<li>groupby MRBTS</li>
<li>自定义聚合以返回属性<a href="https://stackoverflow.com/questions/22219004/how-to-group-dataframe-rows-into-list-in-pandas-groupby">list aggregation</a>的项列表。我使用了一些速记列表理解来准备去<code>agg()</code>的Kwarg</li>
<li>您现在从这个数据框架获得的JSON/dict的结构与您的目标需求相当</li>
<li>我对XML很生疏,已经15年没有做过任何事情了。可能有更好的库可以将JSON转换为XML。这表明结构基本上在那里。一点XSLT就可以很容易地实现这一点</li>
<li>在通过<code>json2xml</code>发送dict之前,我已经从<code>pandas.to_dict()</code>对dict进行了一些实验</li>
</ol>
<pre><code>from json2xml import json2xml
df = pd.DataFrame({'MRBTS':['13004','13004','13005','13005','13005'],
'dest':['10.104.0.0','10.107.0.0','10.104.0.0','10.102.0.0','0.0.0.0'],
'gw':['10.48.0.0','10.45.0.0','10.130.0.0','10.130.0.0','10.110.0.0'],
'length':['16','16','8','8','16']})
a = {c:lambda x: list(x) for c in df.columns if c!="MRBTS"}
df2 = df.groupby("MRBTS").agg(a).reset_index()
js = [{"distName":mo["MRBTS"], "item":[{"dest":mi, "length":mo["length"][i], "gw":mo["gw"][i]}
for i, mi in enumerate(mo["dest"])]}
for mo in df2.to_dict(orient="records")]
print(json2xml.Json2xml(js, attr_type=False).to_xml())
print(json2xml.Json2xml(df2.to_dict(orient="records"), attr_type=False).to_xml())
</code></pre>
<p><strong>输出(仅第一条记录)</strong></p>
<pre><code><?xml version="1.0" ?>
<all>
<item>
<distName>13004</distName>
<item>
<item>
<dest>10.104.0.0</dest>
<length>16</length>
<gw>10.48.0.0</gw>
</item>
<item>
<dest>10.107.0.0</dest>
<length>16</length>
<gw>10.45.0.0</gw>
</item>
</item>
</item>
</all>
</code></pre>