<p>对所有列使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.diff.html" rel="nofollow noreferrer">^{<cd1>}</a>with compare以获得较小的值,如<code>0</code>和<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.any.html" rel="nofollow noreferrer">^{<cd3>}</a>,然后获取主题的<code>vals</code>,并按<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.isin.html" rel="nofollow noreferrer">^{<cd5>}</a>过滤输出:</p>
<pre><code>m = df.groupby('Subject').diff().le(0).any(axis=1)
vals = df.loc[m, 'Subject']
mask = df['Subject'].isin(vals)
df1 = df[mask]
print (df1)
Subject Marks1 Marks2
4 Science 1.0 10
5 Science 1.5 20
6 Science 1.7 15
7 Science 3.0 35
df2 = df[~mask]
print (df2)
Subject Marks1 Marks2
0 English 1.0 10
1 English 1.5 20
2 English 1.7 30
3 English 3.0 40
</code></pre>
<p>编辑:每个组的瓶颈不同,如果所有组都已排序,则可以通过以下方式提高性能:</p>
<pre><code>#columns used for difference (passed to groupby())
cols = ['Subject','col1','col2']
#sorting by all columns (if possible and if necessary)
df = df.sort_values(cols)
m = df[['Marks1','Marks2']].diff().le(0).any(axis=1) & df.duplicated(cols)
vals = df.loc[m, 'Subject']
mask = df['Subject'].isin(vals)
df1 = df[mask]
</code></pre>