我有 dollowing 資料框:
name code 1 2 3 4 5 6 7 .........155 days
0 Lari EH214 0 5 2 1 0 0 0 0 3
1 Suzi FK362 0 0 0 0 2 3 0 0 108
2 Jil LM121 0 0 4 2 1 0 0 0 5
...
我想將第 1 列與第 1 列之間的列與 "days" 上出現的數字相加,例如,
對于第 1 行,我將求和 3 天-> 0 5 2
對于第 2 行 108 天,
對于第 3 行5天->0 4 2 1 0
我怎么能做這樣的事情?尋找方法。
uj5u.com熱心網友回復:
對于矢量化解決方案,首先按位置過濾行,并通過days在 numpy boroadasting 中進行比較來獲取掩碼,如果不匹配,請替換0inDataFrame.where和 last sum:
df1 = df.iloc[:, 2:-1]
m = df1.columns.astype(int).to_numpy() <= df['days'].to_numpy()[:, None]
df['sum'] = df1.where(m, 0).sum(axis=1)
print (df)
name code 1 2 3 4 5 6 7 155 days sum
0 Lari EH214 0 5 2 1 0 0 0 0 3 7
1 Suzi FK362 0 0 0 0 2 3 0 0 108 5
2 Jil LM121 0 0 4 2 1 0 0 0 5 7
uj5u.com熱心網友回復:
IIUC,使用:
df['sum'] = df.apply(lambda r: r.loc[1: r['days']].sum(), axis=1)
或者,如果列名是字串:
df['sum'] = df.apply(lambda r: r.loc['1': str(r['days'])].sum(), axis=1)
輸出:
name code 1 2 3 4 5 6 7 155 days sum
0 Lari EH214 0 5 2 1 0 0 0 0 3 7
1 Suzi FK362 0 0 0 0 2 3 0 0 108 5
2 Jil LM121 0 0 4 2 1 0 0 0 5 7
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/444003.html
上一篇:應用需要列中其他值的函式?
