Python 将两列pandas解析为dict

Python 将两列pandas解析为dict,python,pandas,Python,Pandas,所以,我有一个如下的数据帧 firstname,lastname foo, bar foo, fooz bar, foo foo, bar 我想从这两列创建一个2d dict。 目前,我正在做 d = defaultdict(dict) first_names = df.firstname.values.tolist() last_names = df.lastname.values.tolist() for first, second in zip(first_names, last_nam

所以,我有一个如下的数据帧

firstname,lastname
foo, bar
foo, fooz
bar, foo
foo, bar
我想从这两列创建一个2d dict。 目前,我正在做

d = defaultdict(dict)
first_names = df.firstname.values.tolist()
last_names = df.lastname.values.tolist()
for first, second in zip(first_names, last_names):
    d[first][second] = True

我想知道是否有任何内置的方法可以“有效地”执行此操作。

您的代码生成此
defaultdict

defaultdict(dict, {'bar': {'foo': True}, 'foo': {'bar': True, 'fooz': True}})
您真的需要内部目录中的布尔值吗?否则,
groupby()
将为您提供相同的信息:

grouped = df.groupby('firstname').lastname.unique().to_dict()

grouped
# {'bar': array(['foo'], dtype=object),
#  'foo': array(['bar', 'fooz'], dtype=object)}
如果您确实需要您创建的确切的dict结构,您可以继续进行dict理解:

{k:{k2:True for k2 in v} for k, v in grouped.items()}
# {'bar': {'foo': True}, 'foo': {'bar': True, 'fooz': True}}

您的代码生成此
defaultdict

defaultdict(dict, {'bar': {'foo': True}, 'foo': {'bar': True, 'fooz': True}})
您真的需要内部目录中的布尔值吗?否则,
groupby()
将为您提供相同的信息:

grouped = df.groupby('firstname').lastname.unique().to_dict()

grouped
# {'bar': array(['foo'], dtype=object),
#  'foo': array(['bar', 'fooz'], dtype=object)}
如果您确实需要您创建的确切的dict结构,您可以继续进行dict理解:

{k:{k2:True for k2 in v} for k, v in grouped.items()}
# {'bar': {'foo': True}, 'foo': {'bar': True, 'fooz': True}}
zip(df.firstname,df.lastname)
正常,无需执行
.values.tolist()
zip(df.firstname,df.lastname)
正常,无需执行
.values.tolist()