亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pandas 數據幀 基于現有輸入列派生新的計算列

Pandas 數據幀 基于現有輸入列派生新的計算列

臨摹微笑 2022-09-13 17:38:07
我有以下要求來派生如下的新列#請建議。在我的實際數據集中,有超過1000萬條記錄,并且僅提供樣本記錄對于給定的P,T &W值,我們需要根據現有列(A1,A2,S1&S2)派生新列D1%&D2%。1)任何時間點,如果S1有值A或B,我們需要將值D1%硬編碼為零 2)任何時間點,如果S2有值A或B,我們需要將值D2%硬編碼為零 3)如果S1不等于A或B,我們需要計算D1%,如下所示: ((當前 A1 值 – 以前的 A1 值)/以前的 A1 值)* 100如果 S2 不等于 A 或 B,我們需要計算 D2%,如下所示:((當前 A2 值 – 以前的 A2 值)/以前的 A2 值) * 100示例 # 對于 P = 10,T = 1,W =1,D1% 為 “0”,因為 S1 的值為 “A”。對于 P = 10,T = 1,W =1,D2% 為 “0”,因為 S2 具有值 “B”。               For P = 10, T = 1, W=2, A1=11 and S1 Is having value ‘C’.                D1% = ((11-10)/10) * 100 = 10%                For P = 10, T = 1, W=2, A2=25 and S2 Is having value ‘C’.                D2% = ((25-20)/20) * 100 = 25%Input DataFrame:P   T   W   A1  A2  S1  S210  1   1   10  20  A   B10  1   2   11  25  C   C10  1   3   10  15  D   D10  1   4   9   10  C   C10  1   5   8   5   C   C10  2   1   20  40  B   A10  2   2   10  10  C   C10  2   3   15  30  C   C10  2   4   5   20  D   D10  2   5   25  10  C   CExpected Output DataFrame:P   T   W   A1  A2  S1  S2  D1% D2%10  1   1   10  20  A   B   0   010  1   2   11  25  C   C   10  2510  1   3   10  15  D   D   -9.090909091    -4010  1   4   9   10  C   C   -10 -33.3333333310  1   5   8   5   C   C   -11.11111111    -5010  2   1   20  40  B   A   0   010  2   2   10  10  C   C   -50 -7510  2   3   15  30  C   C   50  20010  2   4   5   20  D   D   -66.66666667    -33.3333333310  2   5   25  10  C   C   400 -50
查看完整描述

1 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

據我所知,您可以堆疊2列S1和S2,并檢查同一索引中的任何值是A還是B,然后使用np.where ,其中條件匹配,分配0 else分配pct_change與您在列A1和A2上顯示的計算相同level=0

cond = df[['S1','S2']].stack().isin(['A','B']).any(level=0)

arr = np.where(cond[:,None], np.zeros(len(df))[:,None],

                df[['A1','A2']].pct_change().mul(100).round(2))

df[['D1%','D2%']] = pd.DataFrame(arr)

print(df)


    P  T  W  A1  A2 S1 S2     D1%     D2%

0  10  1  1  10  20  A  B    0.00    0.00

1  10  1  2  11  25  C  C   10.00   25.00

2  10  1  3  10  15  D  D   -9.09  -40.00

3  10  1  4   9  10  C  C  -10.00  -33.33

4  10  1  5   8   5  C  C  -11.11  -50.00

5  10  2  1  20  40  B  A    0.00    0.00

6  10  2  2  10  10  C  C  -50.00  -75.00

7  10  2  3  15  30  C  C   50.00  200.00

8  10  2  4   5  20  D  D  -66.67  -33.33

9  10  2  5  25  10  C  C  400.00  -50.00




查看完整回答
反對 回復 2022-09-13
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號