我有一个包含列表的列的数据框。我想要 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
答案 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']