<p>看起来您的df在<code>match_id</code>和<code>player_id</code>上有多个索引,因此我将在<code>match_id</code>上执行<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html#pandas.DataFrame.groupby" rel="nofollow">^{<cd3>}</a>,并填充<code>NaN</code>值两次,ffill和bfill:</p>
<pre><code>In [184]:
df.groupby(level=0).fillna(method='ffill').groupby(level=0).fillna(method='bfill')
Out[184]:
yellowCard secondYellow redCard
match_id player_id
1431183600x96x30 76921 1 2 2
76921 1 2 2
1431192600x162x32 71174 3 NaN NaN
</code></pre>
<p>我使用以下代码构建上述内容,而不是使用<code>x</code>值:</p>
<pre><code>In [185]:
t="""match_id player_id yellowCard secondYellow redCard
1431183600x96x30 76921 1 NaN NaN
1431183600x96x30 76921 NaN 2 2
1431192600x162x32 71174 3 NaN NaN"""
df=pd.read_csv(io.StringIO(t), sep='\s+', index_col=[0,1])
df
Out[185]:
yellowCard secondYellow redCard
match_id player_id
1431183600x96x30 76921 1 NaN NaN
76921 NaN 2 2
1431192600x162x32 71174 3 NaN NaN
</code></pre>
<p><strong>编辑</strong>groupby对象有<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.ffill.html#pandas.core.groupby.DataFrameGroupBy.ffill" rel="nofollow">^{<cd7>}</a>和<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.bfill.html#pandas.core.groupby.DataFrameGroupBy.bfill" rel="nofollow">^{<cd8>}</a>方法,因此简化为:</p>
<pre><code>In [189]:
df.groupby(level=0).ffill().groupby(level=0).bfill()
Out[189]:
yellowCard secondYellow redCard
match_id player_id
1431183600x96x30 76921 1 2 2
76921 1 2 2
1431192600x162x32 71174 3 NaN NaN
</code></pre>
<p>然后可以调用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html#pandas.DataFrame.drop_duplicates" rel="nofollow">^{<cd9>}</a>:</p>
<pre><code>In [190]:
df.groupby(level=0).ffill().groupby(level=0).bfill().drop_duplicates()
Out[190]:
yellowCard secondYellow redCard
match_id player_id
1431183600x96x30 76921 1 2 2
1431192600x162x32 71174 3 NaN NaN
</code></pre>