Here is a greatly simplified example you can use as your starting point. It uses the Muenchian method to group orders at the same address, and a recursive named template to extract and sum the weights of each group.
XML
<Orders>
<Order id="1">
<Address>Alpha</Address>
<CarrierInstruction>a,b,c,d, 1.052</CarrierInstruction>
</Order>
<Order id="2">
<Address>Alpha</Address>
<CarrierInstruction>a,b,c,d, 2.025</CarrierInstruction>
</Order>
<Order id="3">
<Address>Alpha</Address>
<CarrierInstruction>a,b,c,d, 3.071</CarrierInstruction>
</Order>
<Order id="4">
<Address>Bravo</Address>
<CarrierInstruction>a,b,c,d, 1.452</CarrierInstruction>
</Order>
<Order id="5">
<Address>Bravo</Address>
<CarrierInstruction>a,b,c,d, 2.507</CarrierInstruction>
</Order>
</Orders>
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="grp" match="Order" use="Address"/>
<xsl:template match="/Orders">
<xsl:copy>
<!-- for each distinct address -->
<xsl:for-each select="Order[count(. | key('grp', Address)[1]) = 1]">
<!-- get the total weight of orders with this address -->
<xsl:variable name="group-weight">
<xsl:call-template name="total">
<xsl:with-param name="nodes" select="key('grp', Address)/CarrierInstruction"/>
</xsl:call-template>
</xsl:variable>
<!-- output current group -->
<xsl:for-each select="key('grp', Address)">
<xsl:copy>
<xsl:copy-of select="@* | node()"/>
<Group-Weight>
<xsl:value-of select="$group-weight"/>
</Group-Weight>
</xsl:copy>
</xsl:for-each>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template name="total">
<xsl:param name="nodes"/>
<xsl:param name="sum" select="0"/>
<xsl:choose>
<xsl:when test="count($nodes)">
<!-- extract the number from the first node -->
<xsl:variable name="num" select="substring-after(substring-after(substring-after(substring-after($nodes[1],','),','),','),',')"/>
<!-- recursive call with the rest of the nodes -->
<xsl:call-template name="total">
<xsl:with-param name="nodes" select="$nodes[position() > 1]"/>
<xsl:with-param name="sum" select="$sum + $num"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sum"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Result
<?xml version="1.0" encoding="UTF-8"?>
<Orders>
<Order id="1">
<Address>Alpha</Address>
<CarrierInstruction>a,b,c,d, 1.052</CarrierInstruction>
<Group-Weight>6.148</Group-Weight>
</Order>
<Order id="2">
<Address>Alpha</Address>
<CarrierInstruction>a,b,c,d, 2.025</CarrierInstruction>
<Group-Weight>6.148</Group-Weight>
</Order>
<Order id="3">
<Address>Alpha</Address>
<CarrierInstruction>a,b,c,d, 3.071</CarrierInstruction>
<Group-Weight>6.148</Group-Weight>
</Order>
<Order id="4">
<Address>Bravo</Address>
<CarrierInstruction>a,b,c,d, 1.452</CarrierInstruction>
<Group-Weight>3.959</Group-Weight>
</Order>
<Order id="5">
<Address>Bravo</Address>
<CarrierInstruction>a,b,c,d, 2.507</CarrierInstruction>
<Group-Weight>3.959</Group-Weight>
</Order>
</Orders>