abh*_*610 4 python indexing if-statement multiple-columns pandas
我dataframe看起来像这样.
Name Val Rating
0 ABC 123 B +
1 DEF 234 B +
2 567 B- NaN
3 GHI 890 D
Run Code Online (Sandbox Code Playgroud)
但我想通过检查(col['Name'])下一列(col['Val'])并连续移位来移动数据.此外,如果发生移位,则更改行index值.我希望以下dataframe作为输出.
Name Val Rating
0 ABC 123 B +
1 DEF 234 B +
NaN 567 B -
2 GHI 890 D
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?
您可以通过布尔掩码移动行:
mask = pd.to_numeric(df['Name'], errors='coerce').notnull()
df[mask] = df[mask].shift(axis=1)
print (df)
Name Val Rating
0 ABC 123 B +
1 DEF 234 B +
2 NaN 567 B-
3 GHI 890 D
Run Code Online (Sandbox Code Playgroud)
细节:
print (pd.to_numeric(df['Name'], errors='coerce'))
0 NaN
1 NaN
2 567.0
3 NaN
Name: Name, dtype: float64
Run Code Online (Sandbox Code Playgroud)
如果确实需要将索引值替换为empty字符串,则可以创建帮助器Series和reindex.
但是不建议这样做,因为性能问题以及此索引可能的某些功能应该失败.
i = df.index[~mask]
df.index = pd.Series(range(len(i)), index=i).reindex(df.index, fill_value='')
print (df)
Name Val Rating
0 ABC 123 B +
1 DEF 234 B +
NaN 567 B-
2 GHI 890 D
Run Code Online (Sandbox Code Playgroud)