<p>您可以<code>groupby</code>为前两列中的每个值组合应用<a href="https://stackoverflow.com/a/43119728/2901002">custom function</a>:</p>
<pre><code>#solution if mising values are empty strings
print (df)
Name Class Marks1 Marks2
0 AA CC 10
1 AA CC 33
2 AA CC 21
3 AA CC 24
cols = ['Marks1','Marks2']
def f(x):
v = x.values
i = np.arange(v.shape[1])
a = (v == '').argsort(0, kind='mergesort')
return pd.DataFrame(v[a, i], index=x.index, columns=cols)
df[cols] = df.groupby(['Name','Class'])[cols].apply(f)
#filter out all rows with '' only
df = df[(df[cols] != '').all(axis=1)]
print (df)
Name Class Marks1 Marks2
0 AA CC 10 33
1 AA CC 21 24
</code></pre>
<hr/>
<pre><code>#solution if missing values are NaNs
print (df)
Name Class Marks1 Marks2
0 AA CC 10 NaN
1 AA CC NaN 33
2 AA CC 21 NaN
3 AA CC NaN 24
cols = ['Marks1','Marks2']
def f(x):
v = x.values
i = np.arange(v.shape[1])
a = pd.isnull(v).argsort(0, kind='mergesort')
arr = v[a, i]
return pd.DataFrame(arr, index=x.index, columns=cols)
df[cols] = df.groupby(['Name','Class'])[cols].apply(f)
#remove all NaNs rows by column cols
df = df.dropna(subset=cols, how='all')
print (df)
Name Class Marks1 Marks2
0 AA CC 10 33
1 AA CC 21 24
</code></pre>