Python 如何将dataframe转换为集合字典?
我有一个数据帧,想转换一个由集合组成的字典 具体来说,我的数据帧和我想制作的内容如下:Python 如何将dataframe转换为集合字典?,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,我有一个数据帧,想转换一个由集合组成的字典 具体来说,我的数据帧和我想制作的内容如下: month date 0 JAN 1 1 JAN 1 2 JAN 1 3 FEB 2 4 FEB 2 5 FEB 3 6 MAR 1 7 MAR 2 8 MAR 3 我的目标是: dict = {'JAN' : {1}, 'FEB' : {2,3},
month date
0 JAN 1
1 JAN 1
2 JAN 1
3 FEB 2
4 FEB 2
5 FEB 3
6 MAR 1
7 MAR 2
8 MAR 3
我的目标是:
dict = {'JAN' : {1}, 'FEB' : {2,3}, 'MAR' : {1,2,3}}
我也写了下面的代码,但是,我不确定它是否合适。
事实上,数据量很大,
因此,我想知道任何提示或其他有效更快的方法,使它
import pandas as pd
df = pd.DataFrame({'month' : ['JAN','JAN','JAN','FEB','FEB','FEB','MAR','MAR','MAR'],
'date' : [1, 1, 1, 1, 2, 3, 1, 2, 3]})
df_list = df.values.tolist()
monthSet = ['JAN','FEB','MAR']
inst_id_dict = {}
for i in df_list:
monStr = i[0]
if monStr in monthSet:
inst_id = i[1]
inst_id_dict.setdefault(monStr, set([])).add(inst_id)
让我们尝试对月份列进行分组,然后按GroupBy.unique进行聚合: 或者,如果您喜欢集合词典,请使用Groupby.agg: 另一个想法是迭代构建dict别担心,尽管使用循环,这可能会超过groupby选项的速度:
让我们尝试对月份列进行分组,然后按GroupBy.unique进行聚合: 或者,如果您喜欢集合词典,请使用Groupby.agg: 另一个想法是迭代构建dict别担心,尽管使用循环,这可能会超过groupby选项的速度:
df.groupby('month', sort=False)['date'].unique().map(set).to_dict()
# {'JAN': [1], 'FEB': [2, 3], 'MAR': [1, 2, 3]}
df.groupby('month', sort=False)['date'].agg(set).to_dict()
# {'JAN': {1}, 'FEB': {2, 3}, 'MAR': {1, 2, 3}}
out = {}
for m, d in df.drop_duplicates(['month', 'date']).to_numpy():
out.setdefault(m, set()).add(d)
out
# {'JAN': {1}, 'FEB': {2, 3}, 'MAR': {1, 2, 3}}