python - 使用 Pandas 变换计数不同
问题描述
假设我有以下数据框:
df2 = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : np.random.randn(8), 'D' : np.random.randn(8)})
df2.head()
如下所示:
A B C D
0 foo one 0.613774 0.783539
1 bar one -0.937659 -0.913213
2 foo two -1.568537 1.569597
3 bar three -0.353449 1.108789
4 foo two -1.769544 0.530466
我知道,如果我想创建另一列,即 A 列中每个值的记录数,我可以执行以下操作:
df2['counts'] = df2.groupby('A')['B'].transform(np.size)
但是,假设我只想计算按 A 分组的 B 的唯一元素?如果我要将数据框减少到 2 列(一列用于“foo”,一列用于“bar”),我知道如何执行此操作,但是如何使用转换来执行此操作?
解决方案
使用GroupBy.transform.nunique
:
df2['counts'] = df2.groupby('A')['B'].transform('nunique')
推荐阅读
- javascript - 如何过滤js中的对象数组?
- java - 关于 java.lang.NoClassDefFoundError: quickfix/MessageStoreFactory 的问题
- robotframework - 带有 RIDE 的循环机器人框架
- c# - 验证 EWS 应用程序 - 下一步是什么
- assembly - 如何从此加密创建解密
- sql - 匹配 h2/postgres 中的文字百分比?
- c# - 如何按名称路由net core mvc
- ibm-mobilefirst - MobileFirst:在 React Native 中处理二进制响应
- docker - Docker 容器退出代码 132
- typo3 - 如何获取用于后端模块的控制器的 flexform 值?