首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给定另一列的值,计算列的唯一值

给定另一列的值,计算列的唯一值
EN

Stack Overflow用户
提问于 2017-05-06 15:38:19
回答 2查看 1.1K关注 0票数 1

所以,我有一个问题,我认为这是相对容易的。

我有一个有三列的dataframe:

代码语言:javascript
复制
A  B  C
x1 a  2
x1 a  2
x1 b  3
x1 c  4
x1 c  4
x2 d  2
x2 d  2
x3 e  5
x3 e  5

现在,如果我想现在对A的每一组(x1,x2,x3),在C中大于2的B中有多少唯一值,并将其赋值给一个新列D,它将返回以下内容

代码语言:javascript
复制
A  B  C  D
x1 a  2  2
x1 a  2  2
x1 b  3  2
x1 c  4  2
x1 c  4  2
x2 d  2  0
x2 d  2  0
x3 e  5  1
x3 e  5  1

在不使用for循环的情况下,我应该如何在Pandas中实现这一点?这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-06 15:53:19

map + groupby + apply + nunique解决方案

代码语言:javascript
复制
df['D'] = df['A'].map(df.groupby('A').apply(lambda x: x.loc[x.C > 2, 'B'].nunique()))
print (df)
    A  B  C  D
0  x1  a  2  2
1  x1  a  2  2
2  x1  b  3  2
3  x1  c  4  2
4  x1  c  4  2
5  x2  d  2  0
6  x2  d  2  0
7  x3  e  5  1
8  x3  e  5  1

map + query + groupby + nunique + fillna + astype解决方案

代码语言:javascript
复制
df['D'] = df['A'].map(df.query('C > 2').groupby('A')['B'].nunique()).fillna(0).astype(int)
print (df)
    A  B  C  D
0  x1  a  2  2
1  x1  a  2  2
2  x1  b  3  2
3  x1  c  4  2
4  x1  c  4  2
5  x2  d  2  0
6  x2  d  2  0
7  x3  e  5  1
8  x3  e  5  1
票数 2
EN

Stack Overflow用户

发布于 2017-05-06 15:45:49

您可以首先基于列C进行筛选,然后使用groupby.nunique。由此产生的系列可用作映射:

代码语言:javascript
复制
df['D'] = df['A'].map(df[df['C']>2].groupby('A')['B'].nunique()).fillna(0)

df
Out: 
    A  B  C    D
0  x1  a  2  2.0
1  x1  a  2  2.0
2  x1  b  3  2.0
3  x1  c  4  2.0
4  x1  c  4  2.0
5  x2  d  2  0.0
6  x2  d  2  0.0
7  x3  e  5  1.0
8  x3  e  5  1.0
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43822288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档