有条件地替换数据框中的列值?

时间:2018-02-15 15:07:44

标签: python python-3.x python-2.7 pandas dataframe

我有一个数据框,我想根据条件替换该列中的某些值。我的数据框看起来像这样

ID    customer_name   arrival_month    leaving_month
1524   ABC              201508           201605 
1185   XYZ              201701           201801
8456   IJK              201801           201902

我在这里尝试一个简单的操作。我想通过currentmonth value = 201802更改leaving_month列中的值,其中leaving_month> 201802。 我尝试过.loc,它给出了以下错误。

df.loc[(df['leaving_month'] > 201802)] = 201802
KeyError: 'leaving_month'

我也尝试了np.where,这也给出了错误。

df['leaving_month']=np.where(df['leaving_month']>currentmonth, currentmonth)
KeyError: 'leaving_month'

我也尝试过暴力循环

for o in range(len(df)):
            if(df.loc[o,'leaving_month']>currentmonth):
                df.loc[o,'leaving_month']=currentmonth
IndexingError: Too many indexers

有人可以指出我正确的方向或弄清楚我做错了什么或建议更好的解决方案?这是一个非常简单的问题,但不知怎的,我没有通过。

1 个答案:

答案 0 :(得分:1)

您正在替换整行。而是使用.loc设置特定列。请参阅下面解决方案中的第二个索引器。

df.loc[df['leaving_month'] > 201802, 'leaving_month'] = 201802
df

返回

     ID customer_name  arrival_month  leaving_month
0  1524           ABC         201508         201605
1  1185           XYZ         201701         201801
2  8456           IJK         201801         201802

您可以在Pandas docs中阅读有关DataFrame索引的信息。