首页 > 解决方案 > 在熊猫中使用多个键索引 groupby 对象

问题描述

我有一个要转换为字典的 pd.DataFrame。字典的键是第一列的值,字典的值是放在元组或列表中的第二列和第三列的值。我试图这样实现:

    df 
    form  name  state
    CCH   bla1  act
    BGH   bla2  act
    BGH   bla3  nad
    KMJ   bla4  nad
    FRT   bla5  nad 
    
    

我希望字典看起来像这样:

    {CCH:[(bla1, act)], BGH:[(bla2,act),(bla3,nad)],KMJ:[(bla4,nad)],FRT:[(bla5,nad)]}

我目前实现这一点的代码是这样的:

    df.groupby('form')[['name','state']].apply(tuple).to_dict()

但我得到这个输出:

    {CCH:('name','state'),BGH:('name','state'),KMJ:('name','state'),FRT:('name','state')}

请让我知道我哪里出错了?提前致谢!

标签: pythonpandas

解决方案


你真的很接近,apply沿着轴 1 尝试元组。这是使用 dict 理解的一种解决方案:

d = {k: v[['name', 'state']].apply(tuple, axis=1).tolist()
     for k, v in df.groupby('form')}

[出去]

{'BGH': [('bla2', 'act'), ('bla3', 'nad')],
 'CCH': [('bla1', 'act')],
 'FRT': [('bla5', 'nad')],
 'KMJ': [('bla4', 'nad')]}

推荐阅读