我在SO上搜索了这类问题,但它们有所不同,无法帮助我得出结论。我有一个包含2列的数据框,“Area”和“Address”。在1000个观测中,有322个独特区域。
我的目标是实际存储与一个区域对应的所有地址字。我尝试过使用dict等,但后来这些都变得太复杂了。熊猫必须有一些简单的东西 这是我的数据:
Sr.no Area Address
1 vasanth nagar cant railway station
2 mahadevapura akme ballet d1001 outer ring road
3 whitefield villa no 106/107 palm medose
4 whitefield fortune hotel,room 4112 opposite sap labs,
5 vasanth nagar station cantonment
我想要的是将所有与whitefield一起出现的单词组合在一起,例如“别墅,不,手掌,财富,酒店,闷热实验室等等”等等。我更喜欢它是一种列表格式,但由于我现在无处可去,任何类型的分组都会将属于每个独特区域的所有地址分配到一起。 Plz注意到我有数以千计的观察结果,因此它不应该是硬编码的 最后,我自己做了什么?这就是一切:
area_ref = data['Area'].sort_index()
area_ref2=set(area_ref)
from collections import defaultdict
grouped = defaultdict(list)
for row in data:
grouped[row['Area']].append(row['Address'])
#dint work . error that index should be int , not string.
subset = data[['Area','Address']]
tuples1 = [tuple(x) for x in subset.values]
from collections import defaultdict
res = defaultdict(list)
for v, k in tuples1: res[k].append(v)
di2=[{'type':k, 'items':v} for k,v in res.items()]
#this last one gave me a really bad dictionary.
这应该不复杂。有一些更好的方法。它会是什么?
答案 0 :(得分:4)
import pandas as pd
def collect_to_set(grp): # 3
return set.union(*[set(row.split()) for row in grp['Address']])
data = pd.read_table('data', sep='\s{2,}') # 1
result = data.groupby(['Area']).apply(collect_to_set) # 2
print(result) # 4
# Area
# mahadevapura set([ballet, outer, road, ring, d1001, akme])
# vasanth nagar set([cant, station, railway, cantonment])
# whitefield set([hotel,room, sap, fortune, villa, no, oppo...
# dtype: object
print(result.to_dict()) # 5
# {'vasanth nagar': set(['cant', 'station', 'railway', 'cantonment']),
# 'mahadevapura': set(['ballet', 'outer', 'road', 'ring', 'd1001', 'akme']),
# 'whitefield': set(['hotel,room', 'sap', 'fortune', 'villa', 'no', 'opposite',
# 'palm', 'labs,', '4112', 'medose', '106/107'])}
read_table
将您的数据片段加载到DataFrame中。
由于您已将data
作为DataFrame,因此您当然不会
需要这条线。data
对Area
进行分组,然后调用
每个组的collect_to_set
函数grp
。collect_to_set
中,grp
是data
的子数据框(包含所有内容)
行具有相同的Area
)。它返回所有单词的set
行grp['Address']
。result
是Series
。result.to_dict()
。答案 1 :(得分:0)
制作你的参赛作品的元组。如下图所示。并运行已排序的方法。
d=(('vasanth nagar','cant railway station'),
('mahadevapura','akme ballet d1001 outer ring road'),
('whitefield','villa no 106/107 palm medose '),
('whitefield','fortune hotel,room 4112 opposite sap labs,'),
('vasanth nagar','station cantonment'))
for i in sorted(d):
print i[0]," ",i[1]