我有一个数据框,需要基于某些标准的多个方程式。我需要获取标识符的前3个字母,然后,如果它是True,我需要将与该行相关联的值除以一定量。
数据框如下:
ID Value
US123 10000
US121 10000
MX122 10000
MX125 10000
BR123 10000
BR127 10000
如果ID以“MX”开头,我需要将值除以100,如果ID以“BR”开头,则将值除以1000。所有其他值必须保持不变 我也不想创建新的过滤数据帧。我已成功通过ID过滤然后进行逻辑检查,但我需要在更大的帧上应用它。
这是我用于过滤帧的代码。
filtered['Value'] = np.where(filtered.ID.apply(lambda x: x[:3]).isin(['MX']) == True, filtered.Value/100, filtered.Value/1000)
我也尝试过df.loc,但我无法弄清楚如何将更改应用到数据帧,它似乎只向我显示了一系列数据,但没有将它应用于DF。
该代码在这里:
df.loc[(df['ID'].str.contains("MX") == True), 'Value']/100
df.loc[(df['ID'].str.contains("BR") == True), 'Value']/1000
有没有更好的方法呢?如何使用df.loc将更改应用于主数据框而不是将其显示在一个系列中?
所需的输出应为:
ID Value
US123 10000
US121 10000
MX122 100
MX125 100
BR123 10
BR127 10
谢谢!
答案 0 :(得分:1)
使用.loc
计算分割值后,必须将其重新分配回用于进行选择的DF
,因为操作本身并非就位。
使用str.startswith
检查以给定模式开头的字符串。
df.loc[df['ID'].str.startswith('MX'), 'Value'] /= 100
df.loc[df['ID'].str.startswith('BR'), 'Value'] /= 1000
df['Value'] = df['Value'].astype(int)
df