我需要根据某些标准在熊猫列上应用多个方程式

时间:2016-11-08 17:25:35

标签: python python-2.7 pandas

我有一个数据框,需要基于某些标准的多个方程式。我需要获取标识符的前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

谢谢!

1 个答案:

答案 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

enter image description here