Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 基于多个条件替换观测值(即多行中的多列)_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 基于多个条件替换观测值(即多行中的多列)

Python 3.x 基于多个条件替换观测值(即多行中的多列),python-3.x,pandas,Python 3.x,Pandas,我试图根据两个条件(例如,特定日期后的特定ID)替换多个观测值中3列的值 我见过类似的问题 然而,他们没有完全解决我的问题,或者我不能完全操纵他们来解决我的问题 此代码将生成一个类似于我的数据帧: 输出数据帧: 我想做什么: 我正在尝试用替换UTM_X、UTM_Y和活动日期 [4449174077830,'06-04-2019'] 什么时候 SUR_ID为“SUR1”,日期>=“2019-06-04 12:00:00” 这是问题1的解决方案的一个不太合适的版本,试图解决我的问题-抛出错

我试图根据两个条件(例如,特定日期后的特定ID)替换多个观测值中3列的值

我见过类似的问题

  • 然而,他们没有完全解决我的问题,或者我不能完全操纵他们来解决我的问题

    此代码将生成一个类似于我的数据帧:

    输出数据帧:

    我想做什么:

    我正在尝试用替换UTM_X、UTM_Y和活动日期

    [4449174077830,'06-04-2019']

    什么时候

    SUR_ID为“SUR1”,日期>=“2019-06-04 12:00:00”

    这是问题1的解决方案的一个不太合适的版本,试图解决我的问题-抛出错误:


    首先确保列Date的类型为datetime,然后在使用2个条件时,它们需要分别位于括号之间。因此,您可以:

    df.DATE = pd.to_datetime(df.DATE)
    df.loc[ (df['SUR_ID'] == 'SUR1') & (df['DATE'] >= pd.to_datetime('2019-06-04 12:00:00')), 
            ['UTM_X', 'UTM_Y', 'ACTIVE_DATE']] = [444917, 4077830, '06-04-2019']
    
    请参见为布尔掩码编写的内容之间的差异:

    [df['SUR_ID'] == 'SUR1' and df['DATE'] >='2019-06-04 12:00:00'] 
    
    括号里是什么

    (df['SUR_ID'] == 'SUR1') & (df['DATE'] >= pd.to_datetime('2019-06-04 12:00:00'))
    
    使用:

    输出:

        SUR_ID  DATE        ACTIVE_DATE UTM_X   UTM_Y
    0   SUR1    05-01-2019  05-01-2019  444895  4077528
    1   SUR1    05-11-2019  05-01-2019  444895  4077528
    2   SUR1    06-15-2019  06-04-2019  444917  4077830
    3   SUR1    06-20-2019  06-04-2019  444917  4077830
    4   SUR2    05-15-2019  05-01-2019  445050  4077762
    5   SUR2    06-20-2019  05-01-2019  445050  4077762
    

    谢谢你的澄清。很高兴知道我离基不太远。我在数据框中将date设置为date time,但我没有在条件中将其设置为datetime。@DevOnLiver确实不太远:),如果列date已经是datetime,则可能不需要在条件中将字符串转换为datetime,但这更严格
    (df['SUR_ID'] == 'SUR1') & (df['DATE'] >= pd.to_datetime('2019-06-04 12:00:00'))
    
    df['UTM_X']=df['UTM_X'].mask(df['SUR_ID'].eq('SUR1') & (pd.to_datetime(df['DATE'])>= pd.to_datetime("2019-06-04 12:00:00")),444917)
    df['UTM_Y']=df['UTM_Y'].mask(df['SUR_ID'].eq('SUR1') & (pd.to_datetime(df['DATE'])>= pd.to_datetime("2019-06-04 12:00:00")),4077830)
    df['ACTIVE_DATE']=df['ACTIVE_DATE'].mask(df['SUR_ID'].eq('SUR1') & (pd.to_datetime(df['DATE'])>= pd.to_datetime("2019-06-04 12:00:00")),'06-04-2019')
    
        SUR_ID  DATE        ACTIVE_DATE UTM_X   UTM_Y
    0   SUR1    05-01-2019  05-01-2019  444895  4077528
    1   SUR1    05-11-2019  05-01-2019  444895  4077528
    2   SUR1    06-15-2019  06-04-2019  444917  4077830
    3   SUR1    06-20-2019  06-04-2019  444917  4077830
    4   SUR2    05-15-2019  05-01-2019  445050  4077762
    5   SUR2    06-20-2019  05-01-2019  445050  4077762