我有一个数据帧df
,如下所示:
KPI Tata JSW
Gross Margin % 0.582 0.476
EBITDA Margin % 0.191 0.23
EBIT Margin % 0.145 0.183
SG&A/Revenue 0.141 0.03
COGS/Revenue 0.418 0.524
CapE/Revenue 0.0577 0.1204
ROA 0.064 0.093
ROE 0.138 0.243
Revenue/Employee $K 290.9 934.4
Inventory Turnover 2.2 3.27
AR Turnover 13.02 14.29
Tot Asset Turnover 0.68 0.74
Current Ratio 0.9 0.8
Quick Ratio 0.3 0.4
我试图添加一个列,例如,scope
,基于以下标准:
if df[df['KPI'].str.contains('Margin|Revenue|ROE|ROA')].shape[0] > 0:
z = 'Max'
elif df[df['KPI'].str.contains('Quick|Current|Turnover')].shape[0] > 0:
z = 'Min'
换句话说,如果字段KPI
包含像Revenue
或Margin
这样的词,那么列scope
应该采用Max
else Min
。现在在KPI == COGS/Revenue
或KPI == CapEx/Revenue
中有一个异常。在这种情况下,scope
应该取Min
,尽管字符串Revenue
存在。你知道吗
因此结果df
应该如下所示:
为了达到同样的效果,我正在尝试apply
一个字段KPI
上的函数。你知道吗
def scope_superlative(col_name):
df_test = df[df[col_name].str.contains('Margin| Revenue|ROA|ROE')]
if df_test.shape[0] > 0:
z = 'Max'
else:
df_test = df[df[col_name].str.contains('/Revenue|Current|Quick|Turnover')] ##<-- I want to check if string 'Revenue' is in denominator.##
if df_test.shape[0] > 0:
z='Min'
return z
##Applying this function##
df['scope'] = df.KPI.apply(lambda x : scope_superlative(x))
上面的代码正在生成一个Error
作为KeyError: 'Gross Margin %
如果我使用df['scope']=df.apply(scope_superlative('KPI'), axis=1)
,我会得到一个错误AttributeError: 'DataFrame' object has no attribute 'Max'
。你知道吗
有人能帮忙吗?在功能或应用技巧上有什么问题吗?你知道吗
apply
函数。你知道吗输出:
对多个条件和值使用^{}
当所有条件都不匹配时,保持
default
参数为所需的值。你知道吗或者
如果你只有一个条件
np.where
的第一个参数是条件,第二个是True时要放入的值,第三个是False时要放入的值我想你在找这样的东西:
这只是使用
df.apply()
函数,该函数接受每一行并对其应用所提供的函数。你知道吗对于给定的数据,得出以下结果:
希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐