<p>以下是我的猜测:</p>
<ol>
<li>初始化<code>df</code></li>
</ol>
<pre><code>>>> df = pd.DataFrame({'Amort': {0: '3,312.50 @ Mar 31, 2020; 3,312.50 @ Jun 30, 2020; 3,312.50 @ Sep 30, 2020; 3,312.50 @ Dec 31, 2020; 3,312.50 @ Mar 31, 2021',
1: '0.64 @ Mar 31, 2020; 0.64 @ Jun 30, 2020; 0.64 @ Sep 30, 2020; 0.63 @ Dec 31, 2020; 0.64 @ Mar 31, 2021; 238.75 @ Jul 31, 2021',
2: '394.51 @ Jun 07, 2020; 394.50 @ Sep 07, 2020;'}})
>>> print(df)
Amort
0 3,312.50 @ Mar 31, 2020; 3,312.50 @ Jun 30, 20...
1 0.64 @ Mar 31, 2020; 0.64 @ Jun 30, 2020; 0.64...
2 394.51 @ Jun 07, 2020; 394.50 @ Sep 07, 2020;
</code></pre>
<ol start=“2”>
<li>定义如何分析一行:</li>
</ol>
<pre><code>import re
from collections import defaultdict
def parse_amort(amort):
records = defaultdict(list)
for record in amort.split(";"):
if record.strip():
amount, _, year = [s.strip() for s in re.split(r"@|, ", record)]
records[year].append(float(amount.replace(",", "")))
return records
</code></pre>
<ol start=“3”>
<li>合计:</li>
</ol>
<pre><code>>>> df.Amort.apply(parse_amort) \
.apply(pd.Series) \
.fillna(0) \
.applymap(lambda l: sum(l) if isinstance(l, list) else 0) \
.add_prefix("Amort_")
Amort_2020 Amort_2021
0 13250.00 3312.50
1 2.55 239.39
2 789.01 0.00
</code></pre>