【问题标题】:How to find largest absolute value from specific columns for repetitive row elements using Pandas in Python and also display row and column index如何在 Python 中使用 Pandas 从特定列中查找重复行元素的最大绝对值并显示行和列索引
【发布时间】:2019-05-14 20:01:43
【问题描述】:

我是 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

【问题讨论】:

    标签: python pandas numpy dataframe max


    【解决方案1】:

    argsort in descending order 用于具有绝对值的位置,并将其用于选择没有绝对值的堆叠值:

    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
    

    【讨论】:

    • 代码的问题是它显示了整个数组中的 4 个最大值。如果所有 4 个最大值都属于第二组“Ele_num”行索引,则输出不显示第一组值。我想要为每组行索引值设置单独的值。
    • 如果不可能有2个值,您能否只提供代码来显示每组重复行索引的最大值。
    • 不容易,但我试试看。
    • 谢谢。请仅提供每组行索引的最大值,而不是前 2 个。例如。行索引(5,10,12,101,4100)在我的原始数据集中重复“15”次。所以我想要'15'最大值(每组1个)。这个 (5,10,12,101,4100) 以相同的顺序重复 15 次。
    • @AkshayK。 - 对不起,现在我很困惑。您可以更改数据以显示您需要的内容吗?
    猜你喜欢
    • 2019-10-01
    • 2019-10-09
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2020-12-05
    • 2019-10-02
    • 2021-07-16
    • 2023-01-03
    相关资源
    最近更新 更多