python - pandas - 根据数据框分组创建键值对

标签 python pandas dataframe

我有一个包含三列的数据框,我想在第一列和第二列上应用groupby函数后创建一个字典。我可以通过for循环来做到这一点,但是有没有pandas方法可以做到这一点?

数据框:

Col X    Col Y    Sum
 A         a       3
 A         b       2
 A         c       1
 B         p       5
 B         q       6
 B         r       7  

对 Col X 和 Col Y 进行分组后: df.groupby(['Col X','Col Y']).sum()

                  Sum
Col X    Col Y    
 A         a       3
           b       2
           c       1
 B         p       5
           q       6
           r       7 

我想创建的字典

{A:{'a':3,'b':2,'c':1}, B:{'p':5,'q':6,'r':7}}

最佳答案

通过 groupby 对象进行迭代时使用字典理解

{name: dict(zip(g['Col Y'], g['Sum'])) for name, g in df.groupby('Col X')}

{'A': {'a': 3, 'b': 2, 'c': 1}, 'B': {'p': 5, 'q': 6, 'r': 7}}

如果你坚持在某个地方使用to_dict,你可以这样做:

s = df.set_index(['Col X', 'Col Y']).Sum
{k: s.xs(k).to_dict() for k in s.index.levels[0]}

{'A': {'a': 3, 'b': 2, 'c': 1}, 'B': {'p': 5, 'q': 6, 'r': 7}}
<小时/>

请记住,to_dict 方法只是在幕后使用一些理解。如果您有一个特殊的用例,需要的东西超出了 orient 选项提供的范围……构建您自己的理解并没有什么可耻的。

关于python - pandas - 根据数据框分组创建键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44125362/

相关文章:

python - 将嵌套字典中的元素替换为列表中的相应元素

python - 书上代码示例的不同结果 : Python for Data Analysis

python - 动态创建包含人员年龄(以月份为单位)的 DataFrame 的最 Pythonic 方法是什么?

Python:函数返回的值未在 Pandas 数据框中更新

python - 从系列创建一个 pd.Dataframe

python - Pandas 在同一列上聚合多个摘要

python - 如何重启flask服务器?

python - 在 O(n) 的排序矩阵中查找小于目标的 # 元素的算法?

python - 在另一列的列表中查找 pandas 数据框列的最接近元素

python - 使用每组上一行的值填充缺失的日期以及重复的条目