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

时间:2020-11-03 10:13:40

标签: python pandas dataframe

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

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的数量。

ex:对于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值的数量。

1 个答案:

答案 0 :(得分:2)

https://github.com/SAP/karma-ui5GroupBy.transformDataFrameGroupBy.nunique一起使用,将1替换为0

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