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

Python 从排序数据帧中提取列值的有效方法,python,pandas,Python,Pandas,假设我有一个数据帧(按第1列排序)df: 对于第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.ad

假设我有一个数据帧(按第1列排序)df:

对于第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是按第1列排序的,我想知道是否有更有效的方法来实现这一点


谢谢大家!

我将研究df.to_dict()方法

你应该能得到你想要的东西。文档站点上的示例如下所示:

>>> 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}}
看起来你在我发帖后更新了,请用“列表”参数查看


'list':类似dict的{column->[values]}

我将研究df.to_dict()方法

你应该能得到你想要的东西。文档站点上的示例如下所示:

>>> 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}}
看起来你在我发帖后更新了,请用“列表”参数查看


“列表”:类似dict的{column->[values]}

首先删除重复项,然后应用于_dict()


首先删除重复项,然后应用于_dict()


删除重复的冗余数据,然后按一列删除分组,获取唯一值并保存到dict:

final_dict = df.drop_duplicates().groupby('column1')['column2'].unique().to_dict()

删除重复的冗余数据,然后按一列删除分组,获取唯一值并保存到dict:

final_dict = df.drop_duplicates().groupby('column1')['column2'].unique().to_dict()

请提供数据框架和预期输出以便于理解您的问题对不起,我只是添加了一些示例。请提供数据框架和预期输出以便于理解您的问题对不起,我只是添加了一些示例。没问题@NicoleYanNo problem@Nicoleyan为什么需要
删除重复项
不需要,但从理论上讲,仅对相关数据执行
groupby
,可以提高性能。不过,你可以把复制品损害性能作为一个例子:)你这样认为吗?我不相信。我来测试一下。无论如何,我的高球答案
{**df.groupby('column1')['column2'].unique()}
正如你所期望的,一个漂亮的答案:)你是对的!对于足够大的数据帧,
drop\u duplicates
会有所不同。为什么需要
drop\u duplicates
呢?不需要,但从理论上讲,仅对相关数据执行
groupby
可以提高性能。不过,你可以把复制品损害性能作为一个例子:)你这样认为吗?我不相信。我来测试一下。无论如何,我的高球答案
{**df.groupby('column1')['column2'].unique()}
正如你所期望的,一个漂亮的答案:)你是对的!对于足够大的数据帧,
drop\u duplicates
起到了作用