通过基于条件

问题描述:

import pandas as pd 
import numpy as np 

dt=pd.DataFrame({'schoolNum':['12','13','14','13'],'oldDistrict':['A','B', 'C','B'],'newDistrict':['F',' ','G',' ']}) 

dt=pd.DataFrame({'schoolNum':['12','13','14','13'],'oldDistrict':['A','B', 'C','B'],'newDistrict':['F','B','G','B']}) 

我试图从另一个值替换一个蟒蛇大熊猫数据框列的值:通过基于条件

dt.ix[dt['oldDistrict']=='13', 'newDistrict']=dt.oldDistrict 

,但我得到的错误消息是一些关于轴线。

+1

你们是不是要替换空白值,或在“schoolNum”替换列与特定值关联的值,每你尝试过什么样的榜样吗? – jack6e

+0

是的,此时我正在尝试替换缺少的(空白)值。但偶尔我也必须处理在某个时间点发生变化的非缺失值。 – izhak

+1

我问,因为A-Za-z的答案限制了用例,即使它适用于你的小例子。 .loc方法更符合你的要求(“根据条件,用另一个python熊猫数据框列的值替换一个python熊猫数据框列的值”),并且为处理未来情况提供了更大的灵活性,包括空白值,即(dt .loc [dt ['newDistrict'] =='','newDistrict'] = dt ['oldDistrict'])。 – jack6e

可以替代由np.nan空白,然后用combine_first

dt = dt.replace({' ': np.nan}) 
dt['newDistrict'] = dt['newDistrict'].combine_first(dt['oldDistrict']) 

返回

newDistrict oldDistrict schoolNum 
0 F   A   12 
1 B   B   13 
2 G   C   14 
3 B   B   13 
+0

谢谢,这工作:) – izhak

+0

不客气,你可以考虑接受答案:) – Vaishali

+1

我也忘记了如何做到这一点,但现在我记得:) #longtimenotaround – izhak

两件事情:

  1. 你想用的.loc代替.ix:

    dt.loc[<condition>, <column(s) returned>] 
    
  2. 'oldDistrict'的值不等于“13” - 这些值在“schoolNum”中。所以,你完全想要的是:

    dt.loc[dt['schoolNum']=='13', 'newDistrict'] = dt['oldDistrict']