Python 基于条件语句的pandas中的Shift列
我试图通过创建一个条件语句来移动数据帧中的一列,但是我不确定我做错了什么。这个数据帧中大约有1000多行,但这里有一个示例 原始数据帧Python 基于条件语句的pandas中的Shift列,python,pandas,dataframe,Python,Pandas,Dataframe,我试图通过创建一个条件语句来移动数据帧中的一列,但是我不确定我做错了什么。这个数据帧中大约有1000多行,但这里有一个示例 原始数据帧 Price Range str_num str_dir str str_sfx city zip 200 - 300k 123 Fake St Boulder 80304 None 30
Price Range str_num str_dir str str_sfx city zip
200 - 300k 123 Fake St Boulder 80304 None
300 - 400k 456 Main St Erie 80123 None
300 - 400k 789 E Lolly St Boulder 80302
300 - 400k 999 N Home Ave Lafayette 80027
现在我要做的是,如果列stru dir
中没有N,E,W,S,将其向右移动,用NaN填充其余的。这是到目前为止我的代码
mylist = ['N','E','W','S']
a=df[~df['str_dir'].isin(mylist)].shift(periods=-1, axis='columns', fill_value=np.NaN)
out_df=a.combine_first(df)
然而,当我运行这段代码时,我得到了这个数据帧
Price Range str_num str_dir str city zip
123 Fake St Boulder 80304 None
456 Main St Erie 80123 None
300 - 400k 789 E Lolly Boulder 80302
300 - 400k 999 N Home Lafayette 80027
我要找的是这个
Price Range str_num str_dir str str_sfx city zip
200 - 300k 123 NaN Fake St Boulder 80304
300 - 400k 456 NaN Main St Erie 80123
300 - 400k 789 E Lolly St Boulder 80302
300 - 400k 999 N Home Ave Lafayette 80027
用于创建布尔掩码m
,然后与掩码m
一起使用,选择需要沿轴=1移动的数据帧行和列:
m = ~df['str_dir'].isin(mylist)
df.loc[m, 'str_dir':] = df.loc[m, 'str_dir':].shift(axis=1)
结果:
Price Range str_num str_dir str str_sfx city zip
0 200 - 300k 123 NaN Fake St Boulder 80304
1 300 - 400k 456 NaN Main St Erie 80123
2 300 - 400k 789 E Lolly St Boulder 80302
3 300 - 400k 999 N Home Ave Lafayette 80027
您通常不想这样做,这是一个反模式,您的read\u csv()
语句错误地处理了分隔符(或者csv分隔符不正确)。你能回到出现故障的read_csv()
,让我们来修复它吗?我基本上用空格分割了包含整个地址的一列