【发布时间】:2012-10-02 06:56:47
【问题描述】:
我正在处理一些数据存储。但是经过预处理后,数据是这样的,例如:
-1|news.cnet.com|Technology News - CNET News|-1|-1
-1|news.google.com|Google News|-1|-1
-1|www.bbc.co.uk|BBC News - Home|-1|-1
-1|www.cnn.com|CNN.com|-1|-1
-1|www.news.com.au|News.com.au|-1|-1
1|news.google.com|-1|2|5,156,672
2|www.cnn.com|-1|71|325,362
3|www.news.com.au|-1|569|74,584
4|www.bbc.co.uk|-1|49|442,302
5|news.cnet.com|-1|107|187,705
格式类似于INDEX|URL|TITLE|RANK|SLI。
值-1 表示该列没有特定值。
可能有相同URL的重复条目,将它们全部合并即可完成记录。
有没有一种巧妙的技巧和窍门可以快速将这些记录组合成一个完整的记录?我不想对所有行进行迭代和循环重复以找到重复的行并合并。
编辑: 预期的输出是这样的:
1|news.google.com|Google News|2|5,156,672
2|www.cnn.com|CNN.com|71|325,362
3|www.news.com.au|News.com.au|569|74,584
4|www.bbc.co.uk|BBC News - Home|49|442,302
5|news.cnet.com|Technology News - CNET News|107|187,705
编辑 2:
通过使用 Panda,正如下面的 root 建议的那样,我可以合并数据列:
from pandas import *
frame = read_csv(r'data.txt', sep='|', names=['index', 'url', 'title', 'rank', 'sli'])
mask = frame['index'].map(lambda x: x > 0)
frame1 = frame[mask].set_index('url')
frame2 = frame[~mask].set_index('url')
frame1.title = frame2.title
frame1.set_index('index')
print frame1
但是,是否有任何不使用任何第三方库的快速方法?
【问题讨论】:
-
你希望它如何合并?你能发布预期的输出吗??
-
对不起,我忘了。我已经更新了预期的输出。谢谢!