Python 基于条件语句的pandas中的Shift列

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

我试图通过创建一个条件语句来移动数据帧中的一列,但是我不确定我做错了什么。这个数据帧中大约有1000多行,但这里有一个示例

原始数据帧

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()
,让我们来修复它吗?我基本上用空格分割了包含整个地址的一列