如何从其他列值有条件创建熊猫列

时间:2019-10-07 23:07:24

标签: python pandas

我有一个看起来像这样的数据框:

currTime=$(ls -lu | grep test01 | awk '{print $8}')
currHour="${currTime:0:2}"
currMin="${currTime:3:3}"
check=0

while [ true ]
do
    timestamp=$(ls -lu | grep test01 | awk '{print $8}')
    timeHour="${timestamp:0:2}"
    timeMin="${timestamp:3:3}"

    if (( $timeHour > $currHour )) || (( $timeMin > $currMin )) || (($timeHour < $currHour ))
    then
        check=1
        set -m
        fg %1
        ./tool.sh
        break
    fi
    sleep 1
done

我想创建两个新列,即df.speaker_1和df.speaker_2。当df.speaker == 2时,我希望df.speaker_2包含df.word的值。当df.speaker!= 2时,我希望它包含一个空字符串。对于其他扬声器值,将重复相同的操作。它应该如下所示:

    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

任何建议将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:1)

您可以从列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,但我发现这种情况更简单。

答案 1 :(得分:0)

您可以使用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