[英]Gather for each unique ids all values from csv in python
我有一个这样的数据集:
id,LON,LAT
00x1,2.17105,41.31353
00x1,1.935983,41.04712
00x2,-5.381285,36.11647
00x2,0.830717,42.19835
00x1,10.21912,43.51599
并且我希望每个唯一的 id 以表单(预期输出)收集列 LAT、LON:
[00x1, [2.17105,41.31353], [1.935983,41.04712], [10.21912,43.51599]]
[00x2, [-5.381285,36.11647], [0.830717,42.19835]]
到目前为止我的代码:
df = pd.read_csv('/home/repos/master/testdat.csv')
ids = []
ids.append((df.as_matrix(columns=['id'])))
#find unique ids
unique_ids = np.unique(ids)
coordinates = (df.as_matrix(columns=['LON', 'LAT']))
访问所有 ID 和坐标,但我不知道如何实现预期的输出。
使用 Pandas,可以将 2 个系列组合成一系列列表,用GroupBy
聚合,然后使用列表理解。 给定一个数据框df
:
df['LON-LAT'] = list(map(list, zip(df['LON'], df['LAT'])))
grouped = df.groupby('id')['LON-LAT'].apply(list)
res = [[k, *v] for k, v in grouped.items()]
结果:
[['00x1',
[2.1710500000000001, 41.31353],
[1.9359830000000002, 41.04712],
[10.21912, 43.515990000000002]],
['00x2',
[-5.3812850000000001, 36.11647],
[0.83071700000000004, 42.198349999999998]]]
您可以使用 csv.DictReader 处理文件并使用另一个字典来保存数据。 最后将字典转换为列表。 我认为这比使用熊猫要容易得多。
import csv
d = {}
with open('testdat.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
d[row['id']] = d.get(row['id'], []) + [[row['LON'], row['LAT']]]
res = [[key] + value for key, value in d.items()]
print(res)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.