迭代行以将项添加到字典中

时间:2017-09-10 18:02:45

标签: python pandas dictionary

我有一个包含列表的列的数据框。我想要 A)查找列表的所有唯一值 B)创建一个格式为{uniquevalue:[indexA,indexB,...]}的字典,其中索引对应于包含uniquevalue的数据帧行的索引。

我已经完成了A,但是我的B代码创建了一个只包含所有索引的字典,无论它们是否包含在行中。你能帮忙吗?

import pandas as pd


df = pd.read_excel(io = 'links.xlsx')

unique_list = []
for row in df['relevant_links']:
    row_list = row.split(sep = ', ')
    unique_list.extend(row_list)

unique_set = set(unique_list)

unique_dict = dict.fromkeys(unique_set, [])

print(unique_dict.keys())

row_idx = 0
for row in df['relevant_links']:            
    [unique_dict[i].append(row_idx) for i in str(row).split(', ') if i in unique_dict]
    row_idx += 1

1 个答案:

答案 0 :(得分:0)

我认为你可以使用:

df = pd.DataFrame({'relevant_links':['a, c, v','a, r, e','e, t','e, r']})
print (df)
  relevant_links
0        a, c, v
1        a, r, e
2           e, t
3           e, r

#create Series 
s = df['relevant_links'].str.split(', ', expand=True).stack()
#groupby by unique links, create list and then dict
unique_dict = s.reset_index(name='val').groupby('val')['level_0'].apply(list).to_dict()
print (unique_dict)
{'v': [0], 't': [2], 'r': [1, 3], 'e': [1, 2, 3], 'a': [0, 1], 'c': [0]}

unique_set = s.unique().tolist()
print (unique_set)
['a', 'c', 'v', 'r', 'e', 't']