首页 > 解决方案 > 熊猫:爆炸数组元素和组?

问题描述

我在 Pandas 0.23 中工作,我有一个数组列和一个布尔列。我想按布尔值和数组中的每个单独元素进行分组,以找到每个元素的真假计数。

示例数据:

a = pd.DataFrame([
  {'vals': ['a,b,c'], 'succeeded': True},
  {'vals': ['a,b'], 'succeeded': False},
  {'vals': ['c'], 'succeeded': True},
  {'vals': ['b,d'], 'succeeded': False},
])

期望的输出:

      succeeded_t     succeeded_f
a     1               1
b     1               2
c     2               0
d     0               1

最好的方法是什么?我是否需要先将数组元素“分解”成行,然后再分组?

标签: pandas

解决方案


也许您可以一次性做到这一点,但只需对两组进行子集处理并str.get_dummies在每个子集上使用,然后将结果连接起来

import pandas as pd

pd.concat([a[a.succeeded].vals.str.get_dummies(sep=',').sum().to_frame('succeeded_t'),
           a[~a.succeeded].vals.str.get_dummies(sep=',').sum().to_frame('succeeded_f')], 
          axis=1, sort=True).fillna(0)

输出:

   succeeded_t  succeeded_f
a          1.0          1.0
b          1.0          2.0
c          2.0          0.0
d          0.0          1.0

或者

如果您不想手动连接输出中的许多列:

(a.set_index('succeeded')
  .vals.str.get_dummies(sep=',')
  .groupby(level=0).sum().T
  .rename_axis(None, axis=1))

输出:

   False  True 
a      1      1
b      2      1
c      0      2
d      1      0

推荐阅读