Могу ли я вычесть 2 столбца с учетом некоторых условий pandas - PullRequest
0 голосов
/ 20 февраля 2020

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

Я хочу вычесть EndTime - StartTime только если channel равно 1000 чему-то вроде этого: df.loc[df['Channel'] == 1000]['X channel view time']=df['EndTime']-df['StartTime'] это должно быть самый быстрый, но, кажется, не работает, так что

def watch_time(row,channel):
    val=0
    if row['Channel']==channel:
        val=row['EndTime']-row['StartTime']   

    return val
df['BTV_view_time'] = df.apply(watch_time,args=250,axis=1)

но это намного медленнее?

Ответы [ 4 ]

1 голос
/ 20 февраля 2020

Вы можете попробовать что-то вроде этого:

import numpy as np 
df['X channel view time'] = np.where(df['channel'] == 1000, df['EndTime'] - df['StartTime'], 0)
1 голос
/ 20 февраля 2020

Вы были не так далеко. Синтаксис:

df.loc[df['Channel'] == 1000, 'X channel view time']=df.loc[df['Channel'] == 1000, 'EndTime']-df.loc[df['Channel'] == 1000, 'StartTime']
1 голос
/ 20 февраля 2020

Вы можете сделать это для всех строк, а затем заменить те, которые не соответствуют вашему фильтру, на 0:

 df['X channel view time'] = df['EndTime'] - df['StartTime']
 df.loc[df['Channel'] == 1000, 'X channel view time'] = 0
0 голосов
/ 20 февраля 2020

обратите внимание, что вы берете кусок df, поэтому он не работает, вы можете сделать что-то вроде этого:

smaller_df = df[df['Channel'] == 1000]['EndTime']-df[df['Channel'] == 1000]['StartTime']

вы также можете создать новый столбец:

df['subtraction'] = [0]*len(df)
df['subtraction'] = df[df['Channel'] == 1000]['EndTime']-df[df['Channel'] == 1000]['StartTime']

замените [0]*len(df) на то, что вы хотите, если 'Channel' отличается от 1000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...