根据 pandas 中其他列中的值移动列

Shift Column based on Values in other column in pandas

我有一个 dataframe 如下:

id  FY   SY   TY   Ylen
1   2018 2019 nan  2
2   2017 2018 2019 3
3   2018 2019 2020 3
4   2019 nan  nan  1
5   2018 nan  nan  1

我想根据 Ylen 中的数字移动列,使其看起来像这样:

id  FY   SY   TY   Ylen
1   nan  2018 2019 2
2   2017 2018 2019 3
3   2018 2019 2020 3
4   nan  nan  2019 1
5   nan  nan  2018 1

是否可以shift()有条件

首先需要相同类型的数据,这里是 floats,然后是 DataFrame.shift 列(按条件):

c = ['FY','SY','TY']

df[c] = df[c].astype(float)

for s in df['Ylen'].unique():
    m = df['Ylen'].eq(s)
    df.loc[m, c] = df.loc[m, c].shift(len(c)-s, axis=1)
print (df)
   id      FY      SY      TY  Ylen
0   1     NaN  2018.0  2019.0     2
1   2  2017.0  2018.0  2019.0     3
2   3  2018.0  2019.0  2020.0     3
3   4     NaN     NaN  2019.0     1
4   5     NaN     NaN  2018.0     1