<p>这是一个尝试。如果我理解正确,请留言。在</p>
<p>给予:</p>
<pre><code>>>> df1
Month Dec Nov
ID
XXX 4.0 1.0
YYY 8.0 3.0
ZZZ 4.0 1.0
>>> df2
Month Dec Nov Oct
ID
AAA 1.0 7.0 9.0
BBB 0.0 NaN 2.0
YYY 5.0 5.0 0.0
</code></pre>
<p>解决方案:</p>
^{pr2}$
<hr/>
<p>说明:</p>
<p>串联只是将<code>df2</code>放在<code>df1</code>之下。在</p>
<pre><code>>>> cat = pd.concat([df1, df2])
>>> cat
Dec Nov Oct
ID
XXX 4.0 1.0 NaN
YYY 8.0 3.0 NaN
ZZZ 4.0 1.0 NaN
AAA 1.0 7.0 9.0
BBB 0.0 NaN 2.0
YYY 5.0 5.0 0.0
</code></pre>
<p><code>reset_index</code>将索引移到列中。在</p>
<pre><code>>>> cat = cat.reset_index()
>>> cat
ID Dec Nov Oct
0 XXX 4.0 1.0 NaN
1 YYY 8.0 3.0 NaN
2 ZZZ 4.0 1.0 NaN
3 AAA 1.0 7.0 9.0
4 BBB 0.0 NaN 2.0
5 YYY 5.0 5.0 0.0
</code></pre>
<p>我这样做的目的是有一个名为<code>'ID'</code>的列,我可以根据该列对其他值进行分组。<code>groupby('ID', sort=False)</code>在<code>'ID'</code>列中创建共享相同值的行组(并且<code>sort=False</code>确保最终结果中的行排序不匹配您的输出)。在</p>
<p>我们可以这样检查组大小:</p>
<pre><code>>>> cat.groupby('ID', sort=False).size()
ID
XXX 1
YYY 2
ZZZ 1
AAA 1
BBB 1
dtype: int64
</code></pre>
<p>如您所见,我们只有一组大小为2的组,因为<code>'YYY'</code>ID是唯一重复的。在</p>
<p><code>sum(min_count=1)</code>的工作原理是这样的:每个组中的值根据其列进行汇总。参数<code>min_count=1</code>确保所有<code>NaN</code>值的一系列相加后得到<code>NaN</code>。在</p>
<pre><code>>>> cat.groupby('ID', sort=False).sum(min_count=1)
Dec Nov Oct
ID
XXX 4.0 1.0 NaN
YYY 13.0 8.0 0.0
ZZZ 4.0 1.0 NaN
AAA 1.0 7.0 9.0
BBB 0.0 NaN 2.0
</code></pre>
<p>演示<code>min_count</code>:</p>
<pre><code>>>> s = pd.Series([np.nan, np.nan])
>>> s
0 NaN
1 NaN
dtype: float64
>>>
>>> s.sum()
0.0
>>> s.sum(min_count=1)
nan
>>> s[0] = 1
>>> s
0 1.0
1 NaN
dtype: float64
>>> s.sum()
1.0
>>> s.sum(min_count=1)
1.0
>>> s.sum(min_count=2)
nan
</code></pre>