Skip to main content
 首页 » 编程设计

python之只在 Pandas 组的字典中保留没有无值的键

2025年05月04日12tuyile006

>>> df = pd.DataFrame({'a': [1,1,1,2,2,3,3,3,3,4,4,5,5],  
'b': [0,1,1,0,1,0,0,1,4,1,0,3,0],  
'v': [2,4,3,7,6,5,9,3,2,4,5,2,3]}) 
>>> df 
    a  b  v 
0   1  0  2 
1   1  1  4 
2   1  1  3 
3   2  0  7 
4   2  1  6 
5   3  0  5 
6   3  0  9 
7   3  1  3 
8   3  4  2 
9   4  1  4 
10  4  0  5 
11  5  3  2 
12  5  0  3 
 
>>> df.groupby(by =['a', 'b']).v.apply(list).unstack().to_dict('index') 
{1: {0: [2], 1: [4, 3], 3: None, 4: None}, 2: {0: [7], 1: [6], 3: None, 4:  
None}, 3: {0: [5, 9], 1: [3], 3: None, 4: [2]}, 4: {0: [5], 1: [4], 3: None, 4:  
None}, 5: {0: [3], 1: None, 3: [2], 4: None}} 

如何在输出字典中避免没有值的键?在目前的情况下,我的字典最终比只包含所需键的情况下大 20 倍。

请您参考如下方法:

使用同样的思路,只需要两次to_dict

df.groupby(by =['a', 'b']).v.apply(list).groupby(level=0).agg(lambda x : x.reset_index(level=0,drop=True).to_dict()).to_dict() 
Out[1092]:  
{1: {0: [2], 1: [4, 3]}, 
 2: {0: [7], 1: [6]}, 
 3: {0: [5, 9], 1: [3], 4: [2]}, 
 4: {0: [5], 1: [4]}, 
 5: {0: [3], 3: [2]}}