【问题标题】:How to find 2 largest values from group of rows in multiple columns in Python and also show its row and column index at output如何从 Python 中多列中的行组中找到 2 个最大值,并在输出时显示其行和列索引
【发布时间】:2019-10-02 11:31:28
【问题描述】:

我是 python 新手。我想从所有列中找到重复行元素的最大值(即 5 到 101),并在输出中显示其行和列索引标签。最大值应该是绝对值。 (与 + 或 - 号无关)行索引组将继续重复“n”次。对于每“第 n”组行索引,我想要每组的“n”个最大值及其索引位置。

在我的数据集中,行索引 5,10,12,101,以相同的顺序重复 3 次(对于 FX、FY 和 FZ)。所以我的输出必须为每组 FX、FY、FZ 显示 2 个最大值。如果我的行索引(5,10,12,101)以相同的顺序重复“n”次,输出必须显示“n”最大值。 FX、FY 和 FZ 的值。

数据框

df=pd.DataFrame({'E_at_0': [43, -53, 45, -17, 19, 11, 32, 36, 19, 11, 32, 36], 
              'E_at_10': [-47, 47, 46, -18, 16, 12, 34, -52, 16, 12, 34, -71], 
              'E_at_20': [56, 43, -41, 29, 14, 13, 33, 43, 14, 13, 33, 43], 
              'E_at_30': [-46, 16, -40, -11, 15, 33, -39, -22, 15, 63, -39, -22]}, index=[5, 10, 12, 101, 5, 10, 12, 101, 5, 10, 12, 101])
df = pd.read_csv ('Allgroups.csv')

df = df.set_index('Ele_Num')
a = int(input("Enter total number of groups: "))

def f(x):
    x1 = x.abs().stack()
    x2 = x.stack()
    x = x2.iloc[np.argsort(-x1)].head(2)
    return x

groups = (df.index == 5).cumsum()
df1 = df.groupby(groups).apply(f).reset_index(level=[1,2])
df1.columns = ['Ele_Num','Column','Values']

print (df1)

df1.to_csv('Group_Output.csv', encoding='utf-8', index=True)

for i in range (1,a+1):

    print (df1.loc[i])

预期结果:

2 Largest Values from FX:
   Element No   Column  Values
1           5  E_at_20      56
1          10  E_at_0      -53

2 Largest Values from FY:
    Element No   Column  Values
2          101  E_at_10     -52
2          101  E_at_20      43

2 Largest Values from FZ:
   Element No   Column  Values
3         101   E_at_10      71
3          10   E_at_30     -63


实际结果:

   Element No   Column  Values
1           5  E_at_20      56
1          10   E_at_0     -53
2         101  E_at_10     -71
2          10  E_at_30      63
   Element No   Column  Values
1           5  E_at_20      56
1          10   E_at_0     -53

   Element No   Column  Values
2         101  E_at_10     -71
2          10  E_at_30      63

【问题讨论】:

    标签: python pandas numpy dataframe max


    【解决方案1】:

    如果只有3 或少数组,我建议创建映射字典:

    d = {1:'FX', 2:'FY', 3:'FZ'}
    
    for i in range (1,a+1):
        print (d[i]) 
        print (f'{a} Largest Values from {d[i]}')
        print (df1.loc[i])
    

    【讨论】:

    • 谢谢。另外,如果你能帮我消除重复。例如。对于上述数据集,第 2 组和第 3 组,Element No. 101 E_at_10 重复。如果元素编号相同,则在 2 个组中,输出必须仅显示具有最大 Value 的组的 1 个实例。 IE。对于第 3 组。值 -71
    • @Akshay K. 可以创建新问题吗?
    • 好的。发布了一个新的
    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 2019-10-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2011-12-12
    • 2020-01-28
    相关资源
    最近更新 更多