【问题标题】:Pandas get all rows of min and max values after groupbyPandas 在 groupby 之后获取所有行的最小值和最大值
【发布时间】:2019-04-22 03:28:37
【问题描述】:

我有一个这样的数据框:

df = pd.DataFrame({'A' : list('ababababba'),
                   'B' : [1, 1, 1, 2, 2, 1,1,2,1,1],
                   'C' : [2.0, 5., 8., 1., 2., 9.,2.0,4.0,5.0,3.0],
                   'D' : [10,20,30,10,20,30,20,40,50,10]})

必填:

   A  B    C   D
0  a  1  2.0  10 # a1 min keep
1  b  1  5.0  20 # b1 min
2  a  1  8.0  30 # a1 max keep
3  b  2  1.0  10 
4  a  2  2.0  20
                  # b1 removed
                  # a1 remove
7  b  2  4.0  40
8  b  1  5.0  50 # b1 max keep
9  a  1  3.0  10 # a1 min keep

相关链接: Min and max row from pandas groupby

Max and min from two series in pandas groupby

Max and Min date in pandas groupby

pandas groupby and then select a row by value of column (min,max, for example)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你想要这个吗:

    df.groupby(['A','B']).D.agg([min,max])
    

    输出:

    +---+---+-----+-----+
    |   |   | min | max |
    +---+---+-----+-----+
    | A | B |     |     |
    +---+---+-----+-----+
    | a | 1 |  10 |  30 |
    |   | 2 |  20 |  20 |
    | b | 1 |  20 |  50 |
    |   | 2 |  10 |  40 |
    +---+---+-----+-----+
    

    编辑:如果您想要所有行的最小值或最大值,请考虑transform

    groups = df.groupby(['A','B']).D
    min_val = groups.transform(min)
    max_val = groups.transform(max)
    
    df[(df.D==min_val) | (df.D==max_val)]
    

    输出:

    +---+---+---+-----+----+
    |   | A | B |  C  | D  |
    +---+---+---+-----+----+
    | 0 | a | 1 | 2.0 | 10 |
    | 1 | b | 1 | 5.0 | 20 |
    | 2 | a | 1 | 8.0 | 30 |
    | 3 | b | 2 | 1.0 | 10 |
    | 4 | a | 2 | 2.0 | 20 |
    | 7 | b | 2 | 4.0 | 40 |
    | 8 | b | 1 | 5.0 | 50 |
    +---+---+---+-----+----+
    

    【讨论】:

    • 我想要所有具有最小值和最大值的行以及 C.
    • 是的,它适用于大量代码,但很棒。一方面,您如何以漂亮的表格形式获得输出?看起来很漂亮,我的 jupyternotebk 只是给了一张桌子。
    • @astro123 我用这个website 来格式化表格。
    • 谢谢,我在想你有某种 python 模块,或者 jupyter-setting 或 Alfred Workflow 之类的。
    • NVM。我知道了。 from tabulate import tabulate print(tabulate(df, headers=df.columns, tablefmt='psql'))
    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多