删除python中的重复值

时间:2014-02-17 23:35:17

标签: python arrays numpy

我在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]]

4 个答案:

答案 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