【问题标题】:Extract information from an Excel (by updating arrays) with Excel / Python使用 Excel / Python 从 Excel 中提取信息(通过更新数组)
【发布时间】:2021-01-22 09:52:09
【问题描述】:

我有一个包含数千列的 Excel 文件,格式如下:

Member No. X Y Z
1000 25 60 -30
-69 38 68
45 2 43
1001 24 55 79
4 -7 89
78 51 -2
1002 45 -55 149
94 77 -985
-2 559 56

我需要一种方法,以便从每列中获得一个具有绝对最大值的新表。在此示例中,类似于:

Member No. X Y Z
1000 69 60 68
1001 78 55 89
1002 94 559 985

我已经在 Excel 中尝试过(使用VLOOKUP 在第一行中查找“成员编号”,然后使用HLOOKUP 从后面的行中查找值),但问题是@987654325 @ 命令不会自动更新新数组(成员编号 1001 所在的数组)(因此我的解决方案适用于成员 1000,但不适用于 1001 和 1002),因此它总是搜索新值仅在第一行(即成员编号为 1000 的行)。

我也尝试使用 Python 读取文件,但我不够精通,无法取得很大进展 - 一旦读取了数据集,我如何告诉 excel 读取接下来的 3 行并获取(绝对) 每列的最大值?

有人可以帮忙吗? Python 3 或 Excel(最好是 Excel 2014)所需的解决方案。

【问题讨论】:

    标签: python excel data-analysis


    【解决方案1】:

    以下解决方案将使用 Python 为您提供所需的输出。

    我首先ffill 填写您的成员编号 列中的空白(axis=0 表示逐行)。然后使用abs 将您的数据框值转换为 +ve。最后,使用pandas.DataFrame.agg,我得到了数据框中所有列的max 值。

    假设你的数据框被称为data:

    import pandas as pd
    
    data['Member No.'] = data['Member No.'].ffill(axis=0).astype(int)
    df = abs(df)
    res = (data.groupby('Member No.').apply(lambda x: x.max())).drop('Member No.',axis=1).reset_index()
    

    哪个会打印你:

       Member No.   X    Y    Z    A    B    C
    0        1000  69   60   68   60   74   69
    1        1001  78   55   89   78   92   87
    2        1002  94  559  985  985  971  976
    

    请注意,我在您的示例数据中添加了额外的列,以确保所有列都返回它们的 max() 值。

    【讨论】:

    • 谢谢!但我收到“NameError:名称'df'未定义”。如果有用,我已将表作为 csv 导入...这是我的代码 ................................ .. import pandas as pd # In[11]: data = pd.read_csv("TEST_database.csv") # In[12]: data # In[ ]: # In[ ]: # In[ ]: # In[ ] : # In[13]: df['会员编号'] = df['会员编号'].ffill(axis=0).astype(int) df = abs(df) res = (df.groupby('成员编号').apply(lambda x: x.max())).drop('成员编号',axis=1).reset_index() # In[ ]: # In[ ]:
    • 好的,让我更新我的代码。该错误告诉您df 不存在,因为您正在读取数据并将其称为data,而不是df。请检查我更新的答案。再次尝试代码并告诉我。
    • 谢谢,感谢您付出的努力!不幸的是,它仍然无法正常工作。这次出现如下错误---- KeyError: 'Member No.'
    • 一旦成功,我绝对会接受它作为正确答案:) 是的,确切的名称确实是“会员号”。我也复查了
    • 对于其他所有人来说,问题在于数据的读取……它是作为单个列读取的。读取它的正确代码是 .... data = pd.read_csv('TEST_database.csv',sep=';')
    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2019-07-01
    • 2013-11-22
    • 2020-06-25
    相关资源
    最近更新 更多