【问题标题】:Grouping Data from Array into Subarrays将数组中的数据分组到子数组中
【发布时间】:2015-06-23 23:16:43
【问题描述】:

我有一组来自 Excel 工作表的 100 行数据。该工作表由 4 列组成 [日期、出站设施编号、目的地纬度、目的地经度]。

我可以将日期索引并分组到整个数组中的两个数组中(因为每天都会记录数据,日期已经聚集在一起),但我的问题是因为出站设施 # 是随机的,我需要一种方法来分组将目的地 (Lat,Lon) 放入每个 Outbound Facility 的数组中。

理想情况下,我希望能够有一个数组,我可以在其中调用t[0][0],python 在第 1 天返回出站设施 1 的所有目的地纬度/经度。

file_location = "C:\Users\PythonPractice.xlsx"

OFs = 4
with xlrd.open_workbook(file_location) as workbook:
    sheet = workbook.sheet_by_index(0)

    Dates = (sheet.cell_value(i,0) for i in range(sheet.nrows))
    Day = [list(group) for key, group in itertools.groupby(Dates)]

d = []

for i in range(sheet.nrows):      
    DC = sheet.cell(i,1).value
    Lat = sheet.cell(i,2).value
    Lon = sheet.cell(i,3).value
    d.append([OF,Lat,Lon])

t = []
for i in range(2):
    T = [d[j:j+len(Day[i])] for j in range(0,len(Day),len(Day[i]))]         
    t.append(T)

这是 excel 文件的摘录。

Date OF Lat Lon
1   1   1   100
1   2   2   99
1   3   3   98
1   4   4   97
1   1   5   96
1   2   6   95
1   3   7   94
1   4   8   93
1   1   9   92
1   2   10  91
1   3   11  90
1   4   12  89
2   3   51  50
2   4   52  49
2   1   53  48
2   2   54  47
2   3   55  46
2   4   56  45
2   1   57  44
2   2   58  43
2   3   59  42
2   4   60  41
2   1   61  40

所以在这种情况下,第 1-4 列是 [Date,OF,Lat,Lon]

我真的很想将每件事都按日期分组,然后按出站设施分组。当我打印 t 时,我希望它看起来像这样:

[[[[1,100],
   [5, 96],
   [9, 92]],
  [[2, 99],
   [6, 95],
   [10,91]],
  [[3, 98],
   [7, 94],
   [11,90]],
  [[4, 97],
   [8, 92],
   [12,89]]],
 [[[53,48],
   [57,44],
   [61,40]],
  [[54,47],
   [58,43]],
  [[51,50],
   [55,46],
   [59,42]],
  [[52,49],
   [56,45],
   [60,41]]]]

【问题讨论】:

  • 您能否发布几行输入文件,并使用该输入数据,发布您希望输出看起来如何的示例?
  • 使用两行输入文件来调试并打印T, Day, Dates ... out。
  • 我继续添加了 excel 摘录

标签: python arrays excel grouping


【解决方案1】:

你考虑过pandas吗?他们有一些构建数据帧的好方法,可以让您抓取大量数据、过滤、可视化等等......

对于您的示例(据我所知),您可以执行以下操作:

import pandas as pd
df = pd.read_excel('my_excel_file.xls')

那么当你想要具体的信息时

mask = (df['Date'] == some_date) & (df['Outbound Facility'] == some_outbound)
filtered_df = df[mask]

filtered_df 将是一个仅包含符合您条件的数据的新数据框。如果您发布示例文件,我可以确保此代码兼容,但它应该非常简单

【讨论】:

  • 哇。 pandas 是一个很棒的模块。我以前没有遇到过。我唯一的问题是如何将值放入数组中以便以后使用它们进行计算?我知道 df[mask] 显示了所有匹配的值及其各自的行号,但是有没有办法使用 pandas 像上面一样存储这些数据?
  • @JacCook 恐怕我不明白你的问题。您的意思是存储来自mask 的信息吗?如果是这种情况,你的答案是肯定的,你可以用它做很多事情。 pandas 具有将数据帧写入 csv、excel、txt 等的内置函数。您还可以从中获取原始的 numpy 数组。如果您详细说明您的困惑以及您想对数据做什么,我可以更清楚地回答
  • 我编辑了原始帖子,以便在代码输出中包含我正在寻找的更深入的概要。我需要首先按日期对数据进行分组。然后我需要再次将数据分组到日期内的出站设施中。这样,当我调用 t[0][0] 时,它将显示第一天和第一个出站设施的所有目的地纬度/经度。
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 2020-12-14
  • 2019-08-29
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2019-06-17
相关资源
最近更新 更多