Pandas基于现有列的首个唯一值创建新列

3
我尝试向数据框添加一个新列,该列仅包含现有列中的唯一值。新列中的行数可能会减少,其中可能含有 np.nan 值,而重复值将不会出现。
import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[3,4,3,4,5]})
df

    a   b
0   1   3
1   2   4
2   3   3
3   4   4
4   5   5

目标:

    a   b   c
0   1   3   3
1   2   4   4
2   3   3   nan
3   4   4   nan
4   5   5   5

我尝试过:
df['c'] = np.where(df['b'].unique(), df['b'], np.nan)

出现错误: 无法将形状为(3,)和(5,)的操作数进行广播 ()

2个回答

3

mask + duplicated

您可以使用Pandas的方法来掩盖一个系列:

df['c'] = df['b'].mask(df['b'].duplicated())

print(df)

   a  b    c
0  1  3  3.0
1  2  4  4.0
2  3  3  NaN
3  4  4  NaN
4  5  5  5.0

2

使用duplicatednp.where

df['c'] = np.where(df['b'].duplicated(),np.nan,df['b'])

或者:

df['c'] = df['b'].where(~df['b'].duplicated(),np.nan)

print(df)
   a  b    c
0  1  3  3.0
1  2  4  4.0
2  3  3  NaN
3  4  4  NaN
4  5  5  5.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接