繁体   English   中英

过滤分组的熊猫数据框,保留列中具有最小值的所有行

[英]Filter grouped pandas dataframe, keep all rows with minimum value in column

df = pd.DataFrame([['SAM', 23, 1],
                   ['SAM', 23, 2],
                   ['SAM', 23, 1],
                   ['SAM', 23, 3],
                   ['BILL', 36, 1],
                   ['BILL', 36, 2],
                   ['BILL', 36, 3],
                   ['BILL', 36, 1],
                   ['JIMMY', 33, 4],
                   ['JIMMY', 33, 2],
                   ['JIMMY', 33, 2],
                   ['JIMMY', 33, 3],
                   ['CARTER', 25, 3],
                   ['CARTER', 25, 4],
                   ['CARTER', 25, 5],
                   ['CARTER', 25, 4],
                   ['GRACE', 27, 4],
                   ['GRACE', 27, 5],
                   ['GRACE', 27, 6],
                   ['TOMMY', 32, 7]])
df.columns = ['A', 'B', 'C']

我需要在数据框中保留所有行,其最小值由 'A' 列分组,并保持 B 相同。 这里有几乎相同的主题但如果我使用

df.loc[df.groupby('A').C.idxmin()]

只剩下最少的一排,我需要所有这些。 预期结果:

预期结果的图像

让我们尝试使用groupby.transform来获取每组 C 的最小值,并与df['C']进行比较并保持那些等于最小值的C值:

df.loc[df.groupby('A')['C'].transform('min').eq(df['C'])].reset_index(drop=True)
        A   B  C
0     SAM  23  1
1     SAM  23  1
2    BILL  36  1
3    BILL  36  1
4   JIMMY  33  2
5   JIMMY  33  2
6  CARTER  25  3
7   GRACE  27  4
8   TOMMY  32  7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM