我在excel中有两列。日期和温度。它们看起来像这样:
date temp
20130102 34.20
20130102 34.42
20130102 34.23
20130102 34.12
20130102 34.84
20130103 34.48
20130103 34.42
20130103 33.77
20130103 33.62
20130103 33.94
20130103 33.45
当我使用numpy将它们提取到python中时,我得到2个这样的数组:
date = [20130102,20130102,20130102,20130102,20130102,20130103,20130103,20130103,20130103]
temp = [34.20,34.42,34.23.....,33.45]
如何通过将1个日期与该日期的所有相应临时值组合,将其转换为1个数组数组。
dataarray = [[20130102,34.20,34.42,34.23,34.12,34.84],[20130103,34.48,34.42,33.77,33.62,33.94,33.45]]
答案 0 :(得分:2)
d = {}
for date,temp in zip(dates,temps):
try:
d[date].append(temp)
except KeyError:
d[date] = [temp]
print d
您可以使用defaultdict稍微改善它
from collections import defaultdict
d = defaultdict(list)
for date,temp in zip(dates,temps):
d[date].append(temp)
答案 1 :(得分:2)
要获得您指定的确切格式(列表列表),我将使用itertools.groupby
,然后使用几个列表推导来解包组生成器:
import itertools
groups = itertools.groupby(zip(date, temp), lambda dv:dv[0])
list_of_lists = [[d] + [v[1] for v in values] for d, values in groups]
根据您的示例,我假设您的数据按排序顺序可用。如果没有,groupby
函数将无法执行您需要它执行的操作,并且您最好使用字典(请参阅下文)。
但是我的猜测是,如果你想在解压缩之后用这些数据实际做任何东西,按日期将它放在字典中会更方便,在这种情况下您需要使用defaultdict
中的Joran's answer策略。
答案 2 :(得分:1)
尝试一个字典,其中键是日期,结果是您追加的数组。因此,您只需解析对并调用dataArray [date [i]]。append(temp [i])等。如果密钥当前为空,请不要忘记创建数组。
答案 3 :(得分:0)
如果您真的想拥有数组格式,请编辑Joran的答案,为您提供数据表:
d = {}
for date,temp in zip(dates,temps):
try:
d[date].append(temp)
except KeyError:
d[date] = [temp]
dataarray = []
for year, temps in d.iteritems():
tmp = [year]
tmp.extend(temps)
dataarray.append(tmp)
print dataarray