基于多个条件替换观察值(即多行中的多列)

德文·奥利弗(Devon Oliver)

我试图基于两个条件(例如,特定日期之后的特定ID)替换多个观察值中3列的值。

我见过类似的问题。

  1. 基于列的熊猫多条件函数

  2. 熊猫替换,多列标准

  3. 熊猫:如何基于多个条件为现有列分配值?

  4. 根据多种条件替换熊猫数据框中的值

但是,他们并没有完全解决我的问题,或者我不能完全通过操纵它们来解决我的问题。

这段代码将生成一个类似于我的数据框:

df = pd.DataFrame({'SUR_ID': {0:'SUR1', 1:'SUR1', 2:'SUR1', 3:'SUR1', 4:'SUR2', 5:'SUR2'}, 'DATE': {0:'05-01-2019', 1:'05-11-2019', 2:'06-15-2019', 3:'06-20-2019', 4: '05-15-2019', 5:'06-20-2019'}, 'ACTIVE_DATE': {0:'05-01-2019', 1:'05-01-2019', 2:'05-01-2019', 3:'05-01-2019', 4: '05-01-2019', 5:'05-01-2019'}, 'UTM_X': {0:'444895', 1:'444895', 2:'444895', 3:'444895', 4: '445050', 5:'445050'}, 'UTM_Y': {0:'4077528', 1:'4077528', 2:'4077528', 3:'4077528', 4: '4077762', 5:'4077762'}})

输出数据框:

在此处输入图片说明

我正在尝试做的是:

我正在尝试将UTM_XUTM_YANDACTIVE_DATE替换

[444917,4077830,'06 -04-2019']

什么时候

SUR_ID为“ SUR1”,且DATE > =“ 2019-06-04 12:00:00”

这是问题1解决方案的适应性较差的版本,试图解决我的问题引发错误:

df.loc[[df['SUR_ID'] == 'SUR1' and df['DATE'] >='2019-06-04 12:00:00'], ['UTM_X', 'UTM_Y', 'Active_Date']] = [444917, 4077830, '06-04-2019']
我想要一片T骨牛排

首先确保“日期”列的类型为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'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章