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