Сдвиг столбца на основе значений в другом столбце в pandas - PullRequest
1 голос
/ 06 марта 2020

У меня есть 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() с условием.

1 Ответ

1 голос
/ 06 марта 2020

Сначала необходимы те же типы данных, здесь float с, а затем 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
...