मेरे पास एक डीएफ है जो इस तरह दिखता है a

मैं EndTime - StartTime को तभी घटाना चाहता हूं जब channel 1000 हो smth इस तरह: 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)

लेकिन यह बहुत धीमा है?

0
Goking 20 फरवरी 2020, 15:59

4 जवाब

आप इसे सभी पंक्तियों के लिए कर सकते हैं और फिर उन पंक्तियों को बदल सकते हैं जो आपके फ़िल्टर में फिट नहीं होती हैं 0:

 df['X channel view time'] = df['EndTime'] - df['StartTime']
 df.loc[df['Channel'] == 1000, 'X channel view time'] = 0
1
Yevhen Kuzmovych 20 फरवरी 2020, 16:04

तुम इतने दूर नहीं थे। सिंटैक्स है:

df.loc[df['Channel'] == 1000, 'X channel view time']=df.loc[df['Channel'] == 1000, 'EndTime']-df.loc[df['Channel'] == 1000, 'StartTime']
1
Serge Ballesta 20 फरवरी 2020, 16:04

आप कुछ इस तरह की कोशिश कर सकते हैं:

import numpy as np 
df['X channel view time'] = np.where(df['channel'] == 1000, df['EndTime'] - df['StartTime'], 0)
1
Sajan 20 फरवरी 2020, 17:09

ध्यान दें कि आप डीएफ का एक टुकड़ा ले रहे हैं, इसलिए यह काम नहीं कर रहा है, आप ऐसा कुछ कर सकते हैं:

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) को आप जो चाहते हैं उससे बदलें यदि 'चैनल' 1000 से भिन्न है

0
Guinther Kovalski 20 फरवरी 2020, 16:12