Python 如果行为空,则使用另一列的值更新一列

Python 如果行为空,则使用另一列的值更新一列,python,pandas,dataframe,Python,Pandas,Dataframe,我有两列数据框扇区和扇区名称,我想更新'Sector'='Sector Name'值,其中'Sector'为空 我有下面的脚本,但它的给定错误“ValueError:无法从重复轴重新编制索引” 请帮助。我认为最好的方法是创建唯一索引,然后使用,或者使用反转条件: dataFinal = dataFinal.reset_index(drop=True) #John Gals dol from comment dataFinal.loc[dataFinal['Sector'] == '', 'Se

我有两列数据框扇区和扇区名称,我想更新'Sector'='Sector Name'值,其中'Sector'为空

我有下面的脚本,但它的给定错误“ValueError:无法从重复轴重新编制索引”


请帮助。

我认为最好的方法是创建唯一索引,然后使用,或者使用反转条件:

dataFinal = dataFinal.reset_index(drop=True)
#John Gals dol from comment 
dataFinal.loc[dataFinal['Sector'] == '', 'Sector'] = dataFinal['Sector Name']
或:

m = dataFinal['Sector'] == ''
dataFinal['Sector'] = dataFinal['Sector'].mask(m, dataFinal['Sector Name'])

样本:

dataFinal = pd.DataFrame({'Sector':['a','ss',''],
                         'Sector Name':['r','t','y']}, index=[4,4,1])
print (dataFinal)
  Sector Sector Name
4      a           r
4     ss           t
1                  y

dataFinal = dataFinal.reset_index(drop=True)

m = dataFinal['Sector'] == ''
dataFinal['Sector'] = dataFinal['Sector'].mask(m, dataFinal['Sector Name'])
print (dataFinal)
  Sector Sector Name
0      a           r
1     ss           t
2      y           y

我认为最好是创建唯一的索引,然后使用,或者使用反转条件:

dataFinal = dataFinal.reset_index(drop=True)
#John Gals dol from comment 
dataFinal.loc[dataFinal['Sector'] == '', 'Sector'] = dataFinal['Sector Name']
或:

m = dataFinal['Sector'] == ''
dataFinal['Sector'] = dataFinal['Sector'].mask(m, dataFinal['Sector Name'])

样本:

dataFinal = pd.DataFrame({'Sector':['a','ss',''],
                         'Sector Name':['r','t','y']}, index=[4,4,1])
print (dataFinal)
  Sector Sector Name
4      a           r
4     ss           t
1                  y

dataFinal = dataFinal.reset_index(drop=True)

m = dataFinal['Sector'] == ''
dataFinal['Sector'] = dataFinal['Sector'].mask(m, dataFinal['Sector Name'])
print (dataFinal)
  Sector Sector Name
0      a           r
1     ss           t
2      y           y

您可以使用
np.where

dataFinal['Sector'] = \
    np.where(dataFinal['Sector'] == '', dataFinal['Sector Name'], dataFinal['Sector'])

感谢您提供的数据:

dataFinal

  Sector Sector Name
4      a           r
4     ss           t
1                  y

dataFinal['Sector'] = \
        np.where(dataFinal['Sector'] == '', dataFinal['Sector Name'], dataFinal['Sector'])
dataFinal
  Sector Sector Name
4      a           r
4     ss           t
1      y           y

您可以使用
np.where

dataFinal['Sector'] = \
    np.where(dataFinal['Sector'] == '', dataFinal['Sector Name'], dataFinal['Sector'])

感谢您提供的数据:

dataFinal

  Sector Sector Name
4      a           r
4     ss           t
1                  y

dataFinal['Sector'] = \
        np.where(dataFinal['Sector'] == '', dataFinal['Sector Name'], dataFinal['Sector'])
dataFinal
  Sector Sector Name
4      a           r
4     ss           t
1      y           y

您可以使用掩码查找数据帧中
扇区
仅包含空白的所有行,然后使用此掩码应用相应的
扇区名称

mask = dataFinal['Sector'].str.isspace()
dataFinal.loc[mask, 'Sector'] = dataFinal.loc[mask, 'Sector Name'] 

您可以使用掩码查找数据帧中
扇区
仅包含空白的所有行,然后使用此掩码应用相应的
扇区名称

mask = dataFinal['Sector'].str.isspace()
dataFinal.loc[mask, 'Sector'] = dataFinal.loc[mask, 'Sector Name'] 

您不应该执行
dataFinal.loc[dataFinal['Sector']='','Sector']=dataFinal['Sector Name']
`@John Galt,感谢您的回复,在重置索引后,它的工作是否应该执行
dataFinal.loc[dataFinal['Sector']='','Sector']=dataFinal['Sector Name']
`@John Galt,感谢您的回复,在重置数据后,索引其工作库+1谢谢你的数据+1.