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

时间:2017-05-23 03:34:31

标签: 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}}

3 个答案:

答案 0 :(得分:1)

通过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选项提供的更多的东西......那么构建你自己的理解就没有羞耻。

答案 1 :(得分:1)

您可以遍历MultiIndex系列:

>>> s = df.set_index(['ColX', 'ColY'])['Sum']
>>> {k: v.reset_index(level=0, drop=True).to_dict() for k, v in s.groupby(level=0)}
{'A': {'a': 3, 'b': 2, 'c': 1}, 'B': {'p': 5, 'q': 6, 'r': 7}}

答案 2 :(得分:0)

$command = $myPdo -> prepare('namesQ');
(To)
$command = $myPdo->prepare($namesQ);