我试图基于两个条件(例如,特定日期之后的特定ID)替换多个观察值中3列的值。
我见过类似的问题。
但是,他们并没有完全解决我的问题,或者我不能完全通过操纵它们来解决我的问题。
这段代码将生成一个类似于我的数据框:
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_X,UTM_Y和ANDACTIVE_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']
首先确保“日期”列的类型为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] 删除。
我来说两句