создать новую серию, основанную на двух других сериях - PullRequest
2 голосов
/ 24 апреля 2019

Я новичок в питоне. Возникает вопрос, как получить новую серию от двух других. например

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

Ответы [ 2 ]

6 голосов
/ 24 апреля 2019

Смотри, ма, без операторов:

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
3 голосов
/ 24 апреля 2019

Это то, что вам нужно 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)

Уммм, может быть, используется десятичное скрытое двоичное число

(-df.a.map(bin).str[-1].astype(int)+3)*df.b
Out[1125]: 
0    12
1    21
2    16
3    27
dtype: int64
...