pandas - 熊猫:爆炸数组元素和组?
问题描述
我在 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
最好的方法是什么?我是否需要先将数组元素“分解”成行,然后再分组?
解决方案
也许您可以一次性做到这一点,但只需对两组进行子集处理并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
推荐阅读
- node.js - 为什么 npm init 在 package.json 中设置主键?
- ibm-mq - 如何恢复队列中的备份消息
- vba - 使用 VBA 在 Lotus Notes 上附加文件
- javascript - 如何使用 jQuery 覆盖一个类
- sql - 需要实现Filter,criteria spring data
- javascript - 我如何在 react.js 上的选择选项 html 标签中传输对象
- php - 由于自定义主题问题,Wordpress 媒体库不会引导媒体
- c# - C# 将字符串解析为表达式
- angular - 在 Angular 6 中使用具有输入属性的可重用组件
- batch-file - 批处理文件 - 将文件名添加到 txt 的第一行