<p>首先将其<code>tagid</code>列包含<code>_</code>的<code>value</code>列值更改为char</p>
<p>然后从<code>tagid</code>列中删除<code>_</code></p>
<pre class="lang-py prettyprint-override"><code>df['value'].update(df.loc[df['tagid'].str.contains('_'), 'value'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)))
df['tagid'] = df['tagid'].apply(lambda x: x.split('_')[0])
</code></pre>
<pre><code># print(df)
datetime tagid value
0 08-04-2021 11:30:58 BNO 21
1 08-04-2021 11:30:58 BNO 15
2 08-04-2021 11:30:58 BNO 86
3 08-04-2021 11:30:58 MDL SP
4 08-04-2021 11:30:58 MDL W
5 08-04-2021 11:30:58 SEQ 04
6 08-04-2021 11:30:58 SEQ 56
7 08-04-2021 11:30:58 STA 724
8 08-04-2021 11:30:58 STO 735
</code></pre>
<p>此外,<code>groupby()</code>{<cd7>}和<code>tagid</code>列,并用<code>''</code>连接每个组中的<code>value</code>列</p>
<pre class="lang-py prettyprint-override"><code>df_ = df.groupby(['datetime','tagid']).apply(lambda x: ''.join(map(str, x['value'].tolist()))).reset_index().rename({0: 'value'}, axis=1)
</code></pre>
<pre><code>print(df_)
datetime tagid value
0 08-04-2021 11:30:58 BNO 211586
1 08-04-2021 11:30:58 MDL SPW
2 08-04-2021 11:30:58 SEQ 0456
3 08-04-2021 11:30:58 STA 724
4 08-04-2021 11:30:58 STO 735
</code></pre>
<p>最后,将<code>BNO</code>和<code>MDL</code>行合并并删除<code>MDL</code>行</p>
<pre class="lang-py prettyprint-override"><code>df_.loc[df_['tagid'] == 'BNO', 'value'] = df_.loc[df_['tagid'] == 'MDL', 'value'].iloc[0] + ' ' + df_.loc[df_['tagid'] == 'BNO', 'value'].iloc[0]
df_ = df_[~(df_['tagid'] == 'MDL')]
</code></pre>
<pre><code># print(df_)
datetime tagid value
0 08-04-2021 11:30:58 BNO SPW 211586
2 08-04-2021 11:30:58 SEQ 0456
3 08-04-2021 11:30:58 STA 724
4 08-04-2021 11:30:58 STO 735
</code></pre>