[英]Calculate the sum of column values per row but not include every value
所以我有這個看起來像這樣的數據集。
ID | 某物 | 1號 | 2號 | 3號 | 4號 | 5號 | 6號 | sum_columns |
---|---|---|---|---|---|---|---|---|
1個 | 105 | 1個 | 鈉 | 鈉 | 2個 | 3個 | 4個 | 4個 |
2個 | 300 | 2個 | 1個 | 1個 | 33 | 6個 | 2個 | 6個 |
3個 | 20 | 1個 | 鈉 | 鈉 | 鈉 | 5個 | 3個 | 3個 |
現在我需要計算以“數字”開頭的列值的總和,但只包括 1-5 范圍內的值。
所以最終的數據集看起來像這樣:
ID | 某物 | 1號 | 2號 | 3號 | 4號 | 5號 | 6號 | sum_columns | 總和值 |
---|---|---|---|---|---|---|---|---|---|
1個 | 105 | 1個 | 鈉 | 鈉 | 2個 | 3個 | 4個 | 4個 | 10 |
2個 | 300 | 2個 | 1個 | 1個 | 33 | 6個 | 2個 | 6個 | 6個 |
3個 | 20 | 1個 | 鈉 | 鈉 | 鈉 | 5個 | 3個 | 3個 | 9 |
我知道我可以像這樣計算包含數字的列的總和:
df['values_sum']=df.filter(like='number').sum(axis=1)
但問題是如何只包含 1-5 范圍內的列中的值。
使用DataFrame.where
過濾值小於6
並替換不匹配到0
:
df1 = df.filter(like='number')
df['values_sum'] = df1.where(df1.lt(6),0).sum(axis=1)
#if need values only range(1,6)
#df['values_sum'] = df1.where(df1.isin(range(1, 6)),0).sum(axis=1)
print (df)
id something number1 number2 number3 number4 number5 number6 \
0 1 105 1 NaN NaN 2.0 3 4
1 2 300 2 1.0 1.0 33.0 6 2
2 3 20 1 NaN NaN NaN 5 3
sum_columns values_sum
0 4 10.0
1 6 6.0
2 3 9.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.