Python 使用复合键将数据帧映射到字典

Python 使用复合键将数据帧映射到字典,python,pandas,dataframe,Python,Pandas,Dataframe,我正在编写一些代码,需要将pandas数据帧映射到由复合键和一些值组成的字典中。 下面是一个起始示例,键由(PostalCode,性别)(姓名,年龄)组成,值是与键匹配的所有工资的总和。我正在寻找一种方法来优雅地进行映射 import pandas as pd data = [ ["tom", 22, "ab 11", "M", 5555], ["Rob", 22, "ab 13", "M", 9999], ["nick", 33, "ab 14", "M", 3333

我正在编写一些代码,需要将pandas数据帧映射到由复合键和一些值组成的字典中。 下面是一个起始示例,
(PostalCode,性别)(姓名,年龄)
组成,
是与
匹配的所有
工资
的总和。我正在寻找一种方法来优雅地进行映射

import pandas as pd

data = [
    ["tom", 22, "ab 11", "M", 5555],
    ["Rob", 22, "ab 13", "M", 9999],
    ["nick", 33, "ab 14", "M", 3333],
    ["nick", 33, "ab 14", "M", 8888],
    ["juli", 18, "ab 15", "F", 2222],
]
people = pd.DataFrame(data, columns=["Name", "Age", "PostalCode", "Sex", "Salary"])

df = people.groupby(["PostalCode", "Sex", "Age"])["Salary"].sum().unstack(0)

d = {col: df[col].dropna().to_dict() for col in df}

print(d)

# Expected output
print(
    {
        (("ab 11", "M"), ("tom", 22)): 5555,
        (("ab 13", "M"), ("Rob", 22)): 9999,
        (("ab 14", "M"), ("nick", 33)): 12221,
        (("ab 15", "F"), ("juli", 18)): 2222,
    }
)

首先聚合
sum
,然后在字典理解中使用变量
a、b、c、d的解包键更改
multi-index
中值的格式:

s = people.groupby(["PostalCode", "Sex","Name", "Age"])["Salary"].sum()
print (s)
PostalCode  Sex  Name  Age
ab 11       M    tom   22      5555
ab 13       M    Rob   22      9999
ab 14       M    nick  33     12221
ab 15       F    juli  18      2222
Name: Salary, dtype: int64

d= {((a,b), (c,d)): v for (a,b,c,d), v in s.items()}
print(d)
{(('ab 11', 'M'), ('tom', 22)): 5555, 
 (('ab 13', 'M'), ('Rob', 22)): 9999, 
 (('ab 14', 'M'), ('nick', 33)): 12221, 
 (('ab 15', 'F'), ('juli', 18)): 2222}

谢谢-这是一个很好的答案-通过使用字典理解,这个解决方案可以扩展到任何类型的键值结构。谢谢