我有一个包含三列的数据框,我想在第一列和第二列上应用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}}
答案 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);