繁体   English   中英

通过计算熊猫另一列中的不同值来创建新列

[英]Create new column by counting distinct values in another column in pandas

您好,我有一个数据框,例如:

COL1_1 COL1_3            COL2
Chr1_0 Canis_lupus       A
Chr1_0 Canis_lupus       A
Chr1_0 Canis_lupus       B
Chr1_0 Canis_lupus       B
Chr1_0 Canis_lupus       B
Chr1_0 Felis_cattus      B
Chr1_0 Felis_cattus      B
Chr2_0 Felis_cattus      A
Chr2_0 Felis_cattus      B
Chr2_1 Felis_cattus      C
Chr2_1 Felis_cattus      D
Chr2_1 Felis_cattus      E

并且这个想法是在每个COL1_1COL1_3计算不同COL2的数量。

例如:对于Chr1_0Canis_lupus ,有 2 个不同的COL2 (A 和 B),所以我将 2 个放入新的COL3

如果只有一个值,我放一个 0。

在这里我应该得到

COL1_1 COL1_3            COL2  COL3
Chr1_0 Canis_lupus       A     2
Chr1_0 Canis_lupus       A     2
Chr1_0 Canis_lupus       B     2
Chr1_0 Canis_lupus       B     2
Chr1_0 Canis_lupus       B     2
Chr1_0 Felis_cattus      B     0
Chr1_0 Felis_cattus      B     0
Chr2_0 Felis_cattus      A     2
Chr2_0 Felis_cattus      B     2
Chr2_1 Felis_cattus      C     3
Chr2_1 Felis_cattus      D     3
Chr2_1 Felis_cattus      E     3

也许一个想法是分组(COL1_1 and COL1_3`)并计算不同 COL2 值的数量。

使用GroupBy.transformDataFrameGroupBy.nuniqueSeries.mask替换10

df['COL3'] = (df.groupby(['COL1_1', 'COL1_3']).COL2.transform('nunique')
                .mask(lambda x: x == 1, 0))

或使用replace

df['COL3'] = df.groupby(['COL1_1', 'COL1_3']).COL2.transform('nunique').replace({1:0})

print (df)
    COL1_1        COL1_3 COL2  COL3
0   Chr1_0   Canis_lupus    A     2
1   Chr1_0   Canis_lupus    A     2
2   Chr1_0   Canis_lupus    B     2
3   Chr1_0   Canis_lupus    B     2
4   Chr1_0   Canis_lupus    B     2
5   Chr1_0  Felis_cattus    B     0
6   Chr1_0  Felis_cattus    B     0
7   Chr2_0  Felis_cattus    A     2
8   Chr2_0  Felis_cattus    B     2
9   Chr2_1  Felis_cattus    C     3
10  Chr2_1  Felis_cattus    D     3
11  Chr2_1  Felis_cattus    E     3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM