根据条件更改熊猫数据

时间:2020-04-07 07:41:10

标签: python pandas dataframe

我有带有特殊字符的数据,我想更改条件单元格的值。

数据在前几行以下 df_orig:

idx A   B   C   D
0   0.5 2   5   #
1   3   5   8   %
2   6   8   10  $
3   9   10  15  $
4   11  15  18  #

我想更改单元格值,其中D中的$,A = 0和B = C

应将输出 更改:

idx   A   B   C   D
0     0.5 2   5   #
1     3   5   8   %
2     0   10  10  $
3     0   15  15  $
4     11  15  18  #

我尝试了

change = df_orig.loc[(df.orig['D'] == '$'), df_orig['A'] == '0'& df_orig['B'] = df_orig['c']

但是没有用。

2 个答案:

答案 0 :(得分:1)

如果需要新的DataFrame,请使用DataFrame.copy,然后分别设置新值:

df = df_orig.copy()
m = df['D'].eq('$')
#alternative
#m = df['D'] == '$'

df.loc[m, 'A'] = 0
df.loc[m, 'B'] = df.C
print (df)
        A   B   C  D
idx                 
0     0.5   2   5  #
1     3.0   5   8  %
2     0.0  10  10  $
3     0.0  15  15  $
4    11.0  15  18  #

也可以一起使用:

m = df['D'].eq('$')
df.loc[m, ['A','B']] = df.assign(E=0).loc[m, ['E','C']].values

答案 1 :(得分:1)

您需要两个单独的语句来更改AB

# make a copy of df_orig
change = df_orig.copy()
# when D == "$", replace A by 0
change.loc[change['D'] == "$", "A"] = 0
# when D == "$", replace B by C
change.loc[change['D'] == "$", "B"] = change.loc[change['D'] == "$", "C"]