微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Pandas:如何将列中的分组列表作为dict返回

如何解决Python Pandas:如何将列中的分组列表作为dict返回

使用agg@ayhan进行编辑(比应用要快得多)。

from collections import Counter
df.groupby("id")["val"].agg(lambda x: Counter([a for b in x for a in b]))

出:

id
a    {'val2': 2, 'val6': 1, 'val7': 1, 'val1': 1}
b              {'val9': 1, 'val33': 1, 'val6': 1}
Name: val, dtype: object

此版本的时间:

%timeit df.groupby("id")["val"].agg(lambda x: Counter([a for b in x for a in b]))

1000 loops, best of 3: 820 µs per loop

@ayhan版本的时间:

%timeit  df.groupby('id')["val"].agg(lambda x: pd.Series([a for b in x.tolist() for a in b]).value_counts().to_dict() )

100 loops, best of 3: 1.91 ms per loo

解决方法

从上一个问题的数据开始:

f = pd.DataFrame({'id':['a','b','a'],'val':[['val1','val2'],['val33','val9','val6'],['val2','val6','val7']]})

print (df)
  id                  val
0  a         [val1,val2]
1  b  [val33,val9,val6]
2  a   [val2,val6,val7]

如何将列表放入Dict:

pd.Series([a for b in df.val.tolist() for a in b]).value_counts().to_dict()
{'val1': 1,'val2': 2,'val33': 1,'val6': 2,'val7': 1,'val9': 1}

如何按组获取列表:

df.groupby('id')["val"].apply(lambda x:  (list([a for b in x.tolist() for a in b])) )

id
a    [val1,val2,val7]
b               [val33,val6]
Name: val,dtype: object

我如何按组获取字典列表:

df.groupby('id')["val"].apply(lambda x: pd.Series([a for b in x.tolist() for a in b]).value_counts().to_dict() )

返回值:

id       
a   val1     1.0
    val2     2.0
    val6     1.0
    val7     1.0
b   val33    1.0
    val6     1.0
    val9     1.0
Name: val,dtype: float64

期望的输出我忽略了什么?:

   id
   a     {'val1': 1,'val7': 1}
   b     {'val33': 1,'val6': 1,'val9': 1}
   Name: val,dtype: object

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。