Как условно создать столбец панды из других значений столбца - PullRequest
0 голосов
/ 08 октября 2019

У меня есть кадр данных, который выглядит следующим образом:

    word              start  stop speaker
0  but that's alright  2.72  3.47  2
1       we'll have to  8.43  9.07  1
2           okay sure  9.19 11.01  2
3               what? 11.02 12.00  1
4             I agree 12.01 14.00  2
5      but i disagree 14.01 17.00  2
6          thats fine 17.01 19.00  1
7     however you are 19.01 22.00  1
8           like this 22.01 24.00  1
9                 and 24.01 25.00  1

Я хочу создать два новых столбца, df.speaker_1 и df.speaker_2. Когда df.speaker == 2, я хочу, чтобы df.speaker_2 содержал значения df.word. Когда df.speaker! = 2, я хочу, чтобы он содержал пустую строку. То же самое будет повторяться для другого значения динамика. Это должно выглядеть следующим образом:

    word        start  stop speaker   speaker_2            speaker_1
0  but that's alright  2.72  3.47  2  but that's alright   
1       we'll have to  8.43  9.07  1                       we'll have to
2           okay sure  9.19 11.01  2  okay sure
3               what? 11.02 12.00  1                       what?
4             I agree 12.01 14.00  2  I agree
5      but i disagree 14.01 17.00  2  but i disagree
6          thats fine 17.01 19.00  1                       thats fine
7     however you are 19.01 22.00  1                       however you are
8           like this 22.01 24.00  1                       like this
9                 and 24.01 25.00  1                       and

Любой совет будет оценен, спасибо.

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вы можете скопировать значения из вашего столбца word, а затем при необходимости заменить пустыми строками:

df['speaker_1'] = df['word']
df['speaker_2'] = df['word']

df.loc[df['speaker'] != 1, 'speaker_1'] = ''
df.loc[df['speaker'] != 2, 'speaker_2'] = ''

В качестве альтернативы, вы можете использовать apply, но я считаю, что это более просто в вашем случае.

0 голосов
/ 08 октября 2019

Вы можете использовать pd.DataFrame.mask():

df['speaker_1'] = df.word.mask(df.speaker!=1, '')
df['speaker_2'] = df.word.mask(df.speaker!=2, '')

#                  word  start  ...        speaker_1           speaker_2
# 0  but that's alright   2.72  ...                   but that's alright
# 1       we'll have to   8.43  ...    we'll have to                    
# 2           okay sure   9.19  ...                            okay sure
# 3               what?  11.02  ...            what?                    
# 4             I agree  12.01  ...                              I agree
# 5      but i disagree  14.01  ...                       but i disagree
# 6          thats fine  17.01  ...       thats fine                    
# 7     however you are  19.01  ...  however you are                    
# 8           like this  22.01  ...        like this                    
# 9                 and  24.01  ...              and                    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...