如何在Pandas中有条件地更新DataFrame列

时间:2013-08-12 20:35:01

标签: python pandas

使用此DataFrame,当rating等于零时,如何有条件地将line_race设置为0?

    line_track  line_race  rating foreign
 25        MTH         10     84    False
 26        MTH          6     88    False
 27        TAM          5     87    False
 28         GP          2     86    False
 29         GP          7     59    False
 30        LCH          0    103     True
 31        LEO          0    125     True
 32        YOR          0    126     True
 33        ASC          0    124     True

换句话说,如果ColumnA = x然后ColumnB = y,那么DataFrame上的正确方法是什么呢?ColumnB = ColumnB

3 个答案:

答案 0 :(得分:96)

df.loc[df['line_race'] == 0, 'rating'] = 0

答案 1 :(得分:3)

使用numpy.where如果ColumnA = x,然后ColumnB = y,否则ColumnB = ColumnB

df['rating'] = np.where(df['line_race']==0, 0, df['rating'])

答案 2 :(得分:0)

我一直使用“选择的答案”中给出的方法,今天我需要在有条件的情况下使用派生值更新列A。 接受的答案显示“如何将line_race列更新为0。 下面是一个示例,您必须获取要更新的值:

df.loc[df['line_race'].isna(), 'rating'] = ( (df['line_race'] - df['line_race2'])/df['line_race2'] )

使用此方法,您只能在符合条件的行上更新动态值。