我有这样一个数据帧:
POLY_KEY_I Class SP_Percent
FS01080100SM001 NA 5.0
MTGP 67.5
Meadow 25.0
Woodland 2.5
FS01080100SM002 PHP 85.0
SP 15.0
对于每个uniqe POLY_KEY_I
,如果Class
==Meadow
,并且SP_Percent
>;=20
,我想把MTGP
转换成{
我想要的输出是:
^{pr2}$我尝试的代码是:
df ['mask'] = ((df['Class'] == 'Meadow') & df['SP_Percent'] >=20)
mask = df.groupby(['POLY_KEY_I'])['mask'].transform('MTGP')
df.loc[mask,'Class']='WMTGP'
print(df)
但这将返回错误:
mask = final.groupby(['POLY_KEY_I'])['mask'].transform('MTGP')
File "C:\Users\Stefano\Anaconda2\lib\site-packages\pandas\core\groupby.py", line 2439, in transform return self._transform_fast(lambda : getattr(self, func)(*args, **kwargs))
File "C:\Users\Stefano\Anaconda2\lib\site-packages\pandas\core\groupby.py", line 2484, in _transform_fast values = func().values
File "C:\Users\Stefano\Anaconda2\lib\site-packages\pandas\core\groupby.py", line 2439, in return self._transform_fast(lambda : getattr(self, func)(*args, **kwargs))
File "C:\Users\Stefano\Anaconda2\lib\site-packages\pandas\core\groupby.py", line 520, in getattr (type(self).name, attr))
AttributeError: 'SeriesGroupBy' object has no attribute 'MTGP
编辑:
我不知道这是否有用,但如果我改变这一行:
mask = df.groupby(['POLY_KEY_I'])['mask'].transform('MTGP')
为此:
mask = df.groupby(['POLY_KEY_I'])['mask'].transform('any')
它将分别将POLY_KEY_ID
的每个值更改为WMTGP
,但我只希望它在MTGP
时更改
我是这样做的:
我用} 。在
apply
自定义函数f
将您的解决方案完全更改为groupby
。对于检查字符串值,最好使用^{输入(增加第5行用于测试):
^{pr2}$编辑1:
添加时间:
^{3}$时间来源:
相关问题 更多 >
编程相关推荐