我有一个数据帧如下:
测向
KEY NAME ID_LOCATION _GEOM
0 61196 name1 [(u'-88.121429', u'41.887726')] [[[lon00,lat00],[lon01, lat01]]]
1 61197 name2 [(u'-75.161934', u'38.725163')] [[[lon10,lat10], [lon11,lat11],...]]
2 61199 name3 [(u'-88.121429', u'41.887726'), (-77.681931, 37.548851)] [[[lon20, lat20],[lon21, lat21]]]
其中id_loc是元组的列表。我如何按id_loc
分组,如果有匹配的(lon, lat) pair
,用逗号分隔合并这2行和其他列。在
预期输出
^{pr2}$我尝试了以下操作,但没有成功,并给出了错误信息unhashable type list
:
def f(x):
return pd.Series(dict(KEY='{%s}' % ', '.join(x['KEY']),
NAME='{%s}' % ', '.join(x['NAME']),
ID_LOCATION='{%s}' % ', '.join(x['ID_LOCATION']),
_GEOM='{%s}' % ', '.join(x['_GEOM']))
)
df = df.groupby('ID_LOCATION').apply(f)
安托万·赞贝利的回答很好;作为练习,也希望它能有所帮助,我想分享一下我个人对这个问题的看法。它还没有完全测试过,但应该可以用。在
正如我在评论中所说的,感谢Pandas drop_duplicates method not working即使在列表中也删除了重复项
我想这应该行得通。在
首先将事物转换成相同类型的列表(这样
sum
将把事物附加在一起)。在然后得到成对的行组合(对于
^{pr2}$id_loc
),即要合并到一起的行对。在现在处理有3行或更多行的情况,即
to_merge = [[1, 2], [2, 3]]
应该是to_merge = [[1, 2, 3]]
。在(从this answer找到)
遍历所有需要合并的行并求和(并删除预合并行)
相关问题 更多 >
编程相关推荐