我想添加一个新列,如果 5 列的范围都具有相同的值,则它将具有该值。否则会出现“错误”。
从这里:
|1 1 1 1 1|
|2 2 2 2 2|
|0 1 2 2 1|
|z z z z z|
为此:
|1 1 1 1 1| 1
|2 2 2 2 2| 2
|0 1 2 2 1| Error
|z z z z z| z
有没有办法在不迭代每一行的情况下做到这一点?
答案 0 :(得分:2)
使用 #numpy.where
和 DataFrame.nunique
测试相同的值:
df['new'] = np.where(df.nunique(axis=1).eq(1), df.iloc[:, 0], 'error')
或者为了更好的性能测试第一列,如果所有列的值相同:
df['new'] = np.where(df.eq(df.iloc[:, 0], axis=0).all(1), df.iloc[:, 0], 'error')
print (df)
0 1 2 3 4 new
0 1 1 1 1 1 1
1 2 2 2 2 2 2
2 0 1 2 2 1 error
3 z z z z z z