【问题标题】:How to find 2 largest values from group of rows in multiple columns in Python and also show its row and column index without duplicates如何从 Python 中多列中的行组中找到 2 个最大值,并显示其行和列索引而不重复
【发布时间】:2019-10-09 05:51:42
【问题描述】:

我是 Python 新手。我想从所有列中找到重复行元素的最大值(即 5 到 150),并在输出中显示其行和列索引标签。最大值应该是绝对值。 (与 + 或 - 号无关)。 行索引组将继续重复“n”次。对于每'n'组行索引,我想要每组的'n'个最大值及其索引位置。 此外,如果某个索引的最大值在不同组中重复,则程序必须将该索引分配给两者中具有最大值的组。 不同组中的行索引不应重复。

我的数据集:

df=pd.DataFrame({'0_deg': [43, 50, 45, -17, 5, 8, 9, 19, 11, 32, 36, 41, 10, 1, 19, 11, 32, 36, 1, 8, 9], 
              '10_deg': [47, 41, 46, -18, 4, 5, 11, 16, 12, 34, -52, 31, 23, 4, 16, 12, 34, -71, 2, 7, 10], 
              '20_deg': [46, 43, -56, 29, 6, 7, 10, 14, 13, 33, 43, 6, 9, -40, 14, 13, 37, 43, 3, 6, 11], 
              '30_deg': [-46, 16, -40, -11, 9, 1, 12, 15, 33, -39, -22, 21, 23, 14, 15, 63, -39, -22, 4, 5, 12]}, index=[5, 10, 12, 101, 130, 140, 150, 5, 10, 12, 101, 130, 140, 150, 5, 10, 12, 101, 130, 140, 150])

df = df.set_index('Number')
def f(x):
    x1 = x.abs().stack()
    x2 = x.stack()
    x = x2.iloc[np.argsort(-x1)].head(b)
    return x

groups = (df.index == 5).cumsum()
df1 = df.groupby(groups).apply(f).reset_index(level=[1,2])
df1.columns = ['Number','Angle','Value']
print (df1)

预期结果:

实际结果:

【问题讨论】:

    标签: python pandas numpy dataframe matrix


    【解决方案1】:

    您可能需要两个groupby 过滤器

    df = df.reset_index()
    df['key']=df['index'].eq(5).cumsum()
    s=df.melt(['key','index'])
    s=s[(-s.value.abs()).groupby(s['index']).rank()==1]
    # just need select max row of each index before pick two from the each group
    s[(-s.value.abs()).groupby(s.key).rank()<=2].sort_values('key')
    Out[672]: 
        key  index variable  value
    21    1      5   10_deg     47
    44    1     12   20_deg    -56
    11    2    130    0_deg     41
    55    2    150   20_deg    -40
    38    3    101   10_deg    -71
    78    3     10   30_deg     63
    

    【讨论】:

    • 谢谢。但输出未按组显示,即“键”列按2 1 3 1 2 3 的顺序显示,顺序应为1 1 2 2 3 3
    猜你喜欢
    • 2019-10-02
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2013-07-10
    • 2019-10-27
    • 2011-12-12
    • 2020-01-28
    相关资源
    最近更新 更多