假设我有一个数据框(按column1排序)df:
column1 column2
1 'Yes'
1 'No'
2 'Yes'
3 'Yes'
3 'Yes'
3 'Yes'
对于第1列中的每个值,我想知道第2列中的可能值,并将这些键值对存储在结构中。
例如,鉴于上述df,我想要一个类似的结构
{1: ['yes','No']; 2: ['Yes'], 3:['Yes']}
我做了类似的事情
for key in df[column1].unique.tolist():
values = df.loc[df[column1] == key]][column2].unique().tolist()
dict.add((key, values))
但是,由于我的原始df很大,因此此方法花费的时间太长。 由于df按column1排序,所以我想知道是否有更有效的方法来实现这一点。
谢谢!
答案 0 :(得分:3)
使用duplicates
删除冗余数据,然后groupby
删除一列,获取唯一值,然后保存到字典:
final_dict = df.drop_duplicates().groupby('column1')['column2'].unique().to_dict()
答案 1 :(得分:1)
我会看看df.to_dict()方法。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_dict.html
您应该能够得到想要的东西。文档站点上的示例如下:
>>> df = pd.DataFrame({'col1': [1, 2],
... 'col2': [0.5, 0.75]},
... index=['row1', 'row2'])
>>> df
col1 col2
row1 1 0.50
row2 2 0.75
df.to_dict()
{'col1': {'row1': 1, 'row2': 2}, 'col2': {'row1': 0.5, 'row2': 0.75}}
自您发布以来,您似乎已更新,请通过“列表”争论进行确认。
“列表”:类似{column-> [values]}
的字典答案 2 :(得分:1)
首先删除重复项,然后将其应用于to_dict()
df.drop_duplicates(subset=['col1','col2'],inplace=True)
df.to_dict()