在遍历数据帧时创建字典的方法



这是我在这里的第一个问题,所以请原谅我的格式错误。

我有一个数据帧它看起来像这样

ID | Contact | First Name | Last Name
1 |    A    |    Joe     |    Doe
1 |    B    |    Jane    |    Doe
2 |    C    |    Peter   |    Parker
2 |    D    |    Iron    |    Man

我想遍历数据框并创建一个字典这样我就能得到如下结果:

{1:{A:[Joe, Doe]}, {B:[Jane, Doe]}, 2:{C:[Peter, Parker]},{D:[Iron, Man]}}

我正在使用pandas来创建数据框架,我已经为此挣扎了一段时间,也许我太笨了,答案很容易,或者与我已经尝试过的不同。

我尝试使用for循环来迭代联系人,然后检查ID是否重复,然后将它们分组在一起,但它不起作用。

提前感谢您的帮助。

一种方法是创建一个Full Name列,然后通过groupby循环并指定您想要对数据做什么:

df['Full Name'] = df[['First Name', 'Last Name']].agg(list, axis=1)
out = {i:d.set_index('Contact')['Full Name'].to_dict() 
for i,d in df.groupby('ID')}

输出:

{1: {'A': ['Joe', 'Doe'], 'B': ['Jane', 'Doe']},
2: {'C': ['Peter', 'Parker'], 'D': ['Iron', 'Man']}}

由于ID似乎是该ID中其余信息的一个键,因此您可以尝试以下操作(将ID中的所有信息放入列表中):

import pandas as pd
df = pd.DataFrame({'ID': [1,1,2,2], 'Contact': ['A', 'B', 'C', 'D'], 'First Name': ['Joe', 'Jane', 'Peter', 'Iron'], 'Last Name': ['Doe', 'Doe', 'Parker', 'Man']})
res = {}
for index, row in df.iterrows():
cur_id = row[0]
cur_contact = row[1]
cur_fname = row[2]
cur_lname = row[3]
if cur_id in res:
res[cur_id].append({cur_contact: [cur_fname, cur_lname]})
else:
res[cur_id] = [{cur_contact: [cur_fname, cur_lname]}]
print(res)

输出:

{1: [{'A': ['Joe', 'Doe']}, {'B': ['Jane', 'Doe']}],
2: [{'C': ['Peter', 'Parker']}, {'D': ['Iron', 'Man']}]}

最新更新