从具有两个唯一值的熊猫系列返回相反值
问题描述:
给定具有两个唯一值的系列,以元素相反的值获取系列的最有效方法是什么?这里有一个例子:从具有两个唯一值的熊猫系列返回相反值
ser = pd.Series(['a', 'b', 'a'])
我要寻找一个功能被应用到ser
,返回:
0 b
1 a
2 b
编辑:此外,如何将溶液中ammended如果存在空值。也就是说,如果
ser = pd.Series(['a', 'b', np.nan , 'a'])
,我们想获得:
0 b
1 a
2 np.nan
3 b
答
使用numpy.unique
可以得到一个方便的逆数组。
v = ser.values
u, i = np.unique(v, return_inverse=True)
如果确实只有2个唯一值,那么您可以这样做。
pd.Series(u[1 - i], ser.index)
0 b
1 a
2 b
dtype: object
如何使用
逆阵的目的是让你重新创建传递的数组,v
在我们的情况下,通过与我们的反i
切片唯一值u
。由于u
只有2个值,因此这些值将是0
和1
。所以当我们切片u[i]
时,我们得到array(['a', 'b', 'a'], dtype=object)
。但是,我们可以得到相反与u[1 - i]
产量array(['b', 'a', 'b'], dtype=object)
答
您可以通过元素的系列使用做一个元素的运用:
代码:
ser = pd.Series(['a', 'b', 'a'])
print(ser.apply(lambda x: 'a' if x == 'b' else 'b'))
结果:
0 b
1 a
2 b
dtype: object
+1
你会得到我的投票+1 – piRSquared
有可能的方式来调整NaN的?正如我在编辑 – splinter
@splinter中所添加的那样,这会成为另一个问题。 – piRSquared