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的新手。我想从所有列中找到重复行元素的最大值(即5到101),并在输出中显示其行和列索引标签。最大值应该是绝对的。 (与-号无关)行索引组将重复重复'n'次。对于行索引的每个"第n个"组,我希望每个组具有" n"个最大值及其索引位置。
在我的数据集中,行索引5,10,12,101以相同的顺序重复3次(对于FX,FY和FZ)。因此,我的输出必须为每个组FX,FY,FZ显示2个最大值。如果我的行索引(5,10,12,101)以相同的顺序重复'n'次,则Output必须显示'n'Max。 FX,FY和FZ的值。
数据框
1 2 3 4 | 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]) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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]) |
预期结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
实际结果:
1 2 3 4 5 | 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 |
1 2 3 4 5 6 7 | 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 |
如果只有
1 2 3 4 5 6 | 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]) |