Панды установить и использовать новое значение строки перед - PullRequest
0 голосов
/ 04 декабря 2018

Я хочу повторно использовать значение столбца панд строки и повторно использовать это значение для всех следующих строк.

df = pd.DataFrame({'A' : [1,2,3,4,5,6],
                'B' : [2,3,4,5,6,7]})
df.loc[df.A < df.B, 'C'] = df.B.shift(1)

print(df)

дает мне:

   A  B    C
0  1  2  NaN
1  2  3  2.0
2  3  4  3.0
3  4  5  4.0
4  5  6  5.0
5  6  7  6.0

, но я действительно хочу:

   A  B    C
0  1  2  NaN
1  2  3  2.0
2  3  4  2.0
3  4  5  2.0
4  5  6  2.0
5  6  7  2.0

любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Спасибо за ваши ответы.Я хочу получить значение из строки раньше, если определенное условие выполнено.

df = pd.DataFrame({'A' : [1,2,3,4,5,6],
                'B' : [2,3,4,5,6,7]})
df['C'] = df['A'] * df['B']
df.loc[df.A < df.B, 'C'] = df['C'].shift(1)
    print(df)

например:

   A  B     C
0  1  2   2.0
1  2  3   2.0 # if A<B take the value from C from line above
2  3  4   2.0 # if A is still < B take again the value from C from
3  4  5   2.0 # line above (which originally was 2 lines above)
4  5  6   2.0 # and so on
5  6  7   2.0

но я получаю:

   A  B     C
0  1  2   NaN
1  2  3   2.0
2  3  4   6.0
3  4  5  12.0
4  5  6  20.0
5  6  7  30.0
0 голосов
/ 04 декабря 2018

Вы можете использовать idxmax.Если условие истинно, получите самое последнее значение в столбце C, иначе C = A * B.

df = pd.DataFrame({'A' : [1,2,3,4,5,6],'B' : [2,3,4,5,6,7]})
df['C'] = df['A'] * df['B']
df['C'] = np.where(df.A < df.B, df.loc[(df.A < df.B).idxmax(), 'C'], df.C)

    A   B   C
0   1   2   2
1   2   3   2
2   3   4   2
3   4   5   2
4   5   6   2
5   6   7   2
0 голосов
/ 04 декабря 2018

SuperStew здесь правильно;может быть так:

df['C'] = 2
df['C'] = df['C'].shift(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...