<p>3个数据帧适合您的情况。这两个具有相同的行:<code>endofday_common_df</code>,<code>intraday_common_df</code></p>
<p>通过分别执行对齐步骤,可以分隔3组行:</p>
<pre><code>eod, intrad = endofday_df.align(intraday_df)
</code></pre>
<p>获取公共行,只需选择任何带有数字的列,不管是哪一列,这里我选择了“成本”:</p>
<pre><code>common = (~eod["Cost"].isna()) & (~intrad["Cost"].isna())
</code></pre>
<p>那么具有公共行的报告是:</p>
<pre><code>DiffColumns = ["Cost", "Proceeds", "NetAmount"]
report_df = pd.DataFrame(
{f"DiffOf{col}": eod[common][col] - intrad[common][col] for col in DiffColumns}
)
</code></pre>
<p>对于给定的数据,它如下所示:</p>
<pre><code> DiffOfCost DiffOfProceeds DiffOfNetAmount
EvaluateDate InvoiceNumber InvoiceItem
08/06/2021 123697 0 0.0 0.0 0.0
1 0.0 0.0 0.0
2 757.0 0.0 757.0
123698 0 1232.0 -3983.0 -2751.0
</code></pre>
<p>仅限EOD的行是(同样,请选择数字列):</p>
<pre><code>only_in_eod = (~eod["Cost"].isna()) & (intrad["Cost"].isna())
print(eod[only_in_eod])
</code></pre>
<p>看起来是这样的:</p>
<pre><code> EvaluatePoint Cost Proceeds NetAmount
EvaluateDate InvoiceNumber InvoiceItem
08/06/2021 123699 0 EndOfDay -4273.0 9276.0 5003.0
1 EndOfDay -4449.0 9845.0 5396.0
</code></pre>
<p>只有当天的行是:</p>
<pre><code>only_in_intrad = (eod["Cost"].isna()) & (~intrad["Cost"].isna())
print(intrad[only_in_intrad])
</code></pre>
<p>这看起来像:</p>
<pre><code> EvaluatePoint Cost Proceeds NetAmount
EvaluateDate InvoiceNumber InvoiceItem
08/06/2021 123696 0 IntraDay -4625.0 10414.0 5789.0
</code></pre>