我是 python 新手。我想从重复行元素的所有列中找到前 2 个最大值(即 5 到 4100),并在输出中显示其各自的行和列索引标签。最大值应该是绝对值。 (不考虑 + 或 - 符号)我的数据结构如图所示:
df = pd.DataFrame({'E_at_0': [43, -53, 45, -17, 45, 19, 11, 32, 36, 32],
'E_at_10': [-47, 47, 46, -18, 53, 16, 12, 34, -71, -34],
'E_at_20': [56, 43, 41, 29, 36, 14, 13, -37, 43, 38],
'E_at_30': [-46, 16, -40, 31, 42, 15, 63, -39, 52, 39]}, index=[5, 10, 12, 101, 4100, 5, 10, 12, 101, 4100])
df.index.name='Ele_Num'
Ele_num 列是我的索引列。
行索引将继续重复 'n' 次。对于每个“第 n 个”数据集,我想要 2 个最大值及其索引位置。
代码正在使用 Pandas
df = pd.read_csv ('trial.csv')
df = df.set_index('Ele_Num')
s = df.abs().stack()
mask = s == s.max()
df1 = df.stack()[mask].reset_index()
df1.columns = ['Element No','Column','Values']
print (df1)
df1.to_csv('trial_output.csv', encoding='utf-8', index=True)
预期结果:
对于第一组行(即对于索引 5,10,12,101,4100)
Ele_Num E_at_20
5 56
对于第二组行(即再次为索引 5,10,12,101,4100)
Ele_Num E_at_10
101 -71
行索引将继续重复 'n' 次。对于每个“第 n 个”数据集,我想要 2 个最大值及其索引位置。
实际结果:
Ele_Num E_at_30
101 -71
最佳答案
使用argsort in descending order对于具有绝对值的位置,并将其用于选择没有 abs 的堆叠值:
N = 4
s = df.abs().stack()
df1 = df.stack().iloc[np.argsort(-s)].head(N).reset_index()
df1.columns = ['Element No','Column','Values']
print (df1)
Element No Column Values
0 101 E_at_10 -71
1 10 E_at_30 63
2 5 E_at_20 56
3 10 E_at_0 -53
关于python - 如何在 Python 中使用 Pandas 从特定列中查找重复行元素的最大绝对值并显示行和列索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56128518/