将数据从数组分组到子数组中

时间:2015-06-23 14:37:55

标签: python arrays excel grouping

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

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

理想情况下,我希望能够拥有一个可以调用t[0][0]的数组,并且python将在第1天返回所有目的地Lat / Lon,用于出站设施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]]]]

1 个答案:

答案 0 :(得分:0)

您考虑过pandas了吗?他们有一些很好的方法来构建数据框,允许你抓取大量数据,过滤它,可视化等等......

对于你的例子(从我可以收集的内容),你可以做类似的事情:

is_on

然后当您需要特定信息时

  <label class="primary_btn" for="post_images_attributes_0_is_on">Set as primary</label>
  <input id="post_images_attributes_0_is_on" name="post[images_attributes][0][is_on]" style="display:none;" type="checkbox" value="1">

import pandas as pd df = pd.read_excel('my_excel_file.xls') 将是一个仅包含符合条件的数据的新数据框。如果您发布示例文件,我可以确保此代码兼容,但它应该非常简单