將A列的每一行與上一行進行比較,如果大于,則重新賦值給上一行的值,如果小于,則值不變現在的問題是每次與原始值進行比較我想要的是,與重新分配后的上一行進行比較
import pandas as pd
import numpy as np
d={'A':[16,19,18,15,13,16]}
df = pd.DataFrame(d)
df['A_changed']=np.where(df.A>df.A.shift(),df.A.shift(),df.A)
df
A A_changed
0 16 16.0
1 19 16.0
2 18 18.0
3 15 15.0
4 13 13.0
5 16 13.0
預期產出
A A_changed
0 16 16.0
1 19 16.0
2 18 16.0
3 15 15.0
4 13 13.0
5 16 13.0
uj5u.com熱心網友回復:
你想做cummin什么?
df['compare_min'] = df['A'].cummin()
輸出:
A compare compare_min
0 5 5.0 5
1 14 5.0 5
2 12 12.0 5
3 15 12.0 5
4 13 13.0 5
5 16 13.0 5
df['b'] = [10, 11, 12, 5, 8, 2]
df['compare_min_b'] = df['b'].cummin()
輸出:
A compare compare_min b compare_min_b
0 5 5.0 5 10 10
1 14 5.0 5 11 10
2 12 12.0 5 12 10
3 15 12.0 5 5 5
4 13 13.0 5 8 5
5 16 13.0 5 2 2
使用您的示例進行更新,這正是 cummin 所做的:
d={'A':[16,19,18,15,13,16]}
df = pd.DataFrame(d)
df['A_change'] = df['A'].cummin()
df
輸出:
A A_changed A_change
0 16 16.0 16
1 19 16.0 16
2 18 18.0 16
3 15 15.0 15
4 13 13.0 13
5 16 13.0 13
這就是您的代碼不起作用的原因。
d={'A':[16,19,18,15,13,16]}
df = pd.DataFrame(d)
df['A_shift'] = df['A'].shift()
df
輸出:
A A_shift
0 16 NaN
1 19 16.0
2 18 19.0
3 15 18.0
4 13 15.0
5 16 13.0
查看移位列的輸出,您要做的是保留累積的礦井,而不僅僅是將 A 與移位的 A 進行比較。因此,索引 2 并沒有給您預期的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/497812.html
