我是python的新手。 有一个关于如何从其他两个系列中获得新系列的问题。 例如
a b
1 6
4 7
5 8
8 9
然后,如果a为奇数,则b * 2而a为偶数* 3,之后我们要获得一个新的级数。
c
1 is odd ? 6 * 2 : 6 * 3
4 is odd ? 7 * 2 : 7 * 3
5 is odd ? 8 * 2 : 8 * 3
8 is odd ? 9 * 2 : 9 * 3
========
c
12
21
16
27
答案 0 :(得分:6)
你好,没有运算符:
df['a'].mod(2).rsub(3).mul(df['b'])
0 12
1 21
2 16
3 27
dtype: int64
您也可以使用np.where
来获取被乘数,而不是在表达式内进行乘法。这样,您只需要在末尾乘法一次即可(乘法很昂贵!):
df['b'] * np.where(df['a'] % 2, 2, 3)
0 12
1 21
2 16
3 27
Name: b, dtype: int64
答案 1 :(得分:3)
这就是您需要的np.where
和%
The % (modulo) operator yields the remainder from the division of the first argument by the second
np.where(df.a%2,df.b*2,df.b*3)
Out[1115]: array([12, 21, 16, 27], dtype=int64)
df['c']= np.where(df.a%2,df.b*2,df.b*3)
Ummm可能使用二进制的十进制隐蔽
(-df.a.map(bin).str[-1].astype(int)+3)*df.b
Out[1125]:
0 12
1 21
2 16
3 27
dtype: int64