从排序的数据框中提取列值的有效方法

时间:2019-06-20 18:30:56

标签: python pandas

假设我有一个数据框(按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排序,所以我想知道是否有更有效的方法来实现这一点。

谢谢!

3 个答案:

答案 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()