通过基于条件
问题描述:
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
,但我得到的错误消息是一些关于轴线。
答
可以替代由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
答
两件事情:
-
你想用的.loc代替.ix:
dt.loc[<condition>, <column(s) returned>]
-
'oldDistrict'的值不等于“13” - 这些值在“schoolNum”中。所以,你完全想要的是:
dt.loc[dt['schoolNum']=='13', 'newDistrict'] = dt['oldDistrict']
你们是不是要替换空白值,或在“schoolNum”替换列与特定值关联的值,每你尝试过什么样的榜样吗? – jack6e
是的,此时我正在尝试替换缺少的(空白)值。但偶尔我也必须处理在某个时间点发生变化的非缺失值。 – izhak
我问,因为A-Za-z的答案限制了用例,即使它适用于你的小例子。 .loc方法更符合你的要求(“根据条件,用另一个python熊猫数据框列的值替换一个python熊猫数据框列的值”),并且为处理未来情况提供了更大的灵活性,包括空白值,即(dt .loc [dt ['newDistrict'] =='','newDistrict'] = dt ['oldDistrict'])。 – jack6e