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

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

用for循環簡化重復乘法?

用for循環簡化重復乘法?

慕的地6264312 2023-04-11 15:25:43
有沒有更優雅的方式來編寫這段代碼?我一遍又一遍地做同樣的手術,所以感覺好像有,但我想不起來。成人是熊貓數據框。權重是人的樣本權重,每個 ped 變量代表不同的殘疾類型。total_cognitive_m = (adults.weight * (adults.pedisrem==1)).sum()/1e6total_mobility_m = (adults.weight * (adults.pedisout==1)).sum()/1e6total_self_care_m = (adults.weight * (adults.pedisdrs==1)).sum()/1e6total_physical_m = (adults.weight * (adults.pedisphy==1)).sum()/1e6 total_vision_m = (adults.weight * (adults.pediseye==1)).sum()/1e6total_hearing_m = (adults.weight* (adults.pedisear==1)).sum()/1e6total_disabled_m = (adults.weight * adults.disabled).sum()/1e6
查看完整描述

3 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

如果您可以創建一個函數來減少重復代碼,它會有所幫助:


def calc(adults, name):

    return (adults.weight * (getattr(adults,name)==1)).sum() / 1e6

但是如果您使用許多單獨的變量,您仍然需要為每個單獨的賦值語句(這里不包括某些高級但“hacky”的解決方案):


total_cognitive_m = calc(adults, 'pedisrem')

total_mobility_m = calc(adults, 'pedisout')

... etc ...

如果您可以將輸出數據放入某種集合(例如字典)中,那就更好了。在這種情況下,您可以這樣做:


inputs_to_use = {

    'total_cognitive_m': 'pedisrem',

    'total_mobility_m': 'pedisout',

    ... etc ...

    }

然后,您可以使用以下方法制作輸出字典:


outputs = { key: calc(adults, name) 

            for key, name in inputs_to_use.items() }

然后查找值,例如通過做


print(outputs["total_cognitive_m"])


查看完整回答
反對 回復 2023-04-11
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

此代碼假定屬性始終存在于 adults 變量中。


'''

The common behaviour of picking an attribute on adult 

like pedisrem and doing ( adult.weights * <attribute of adults> == 1).sum()/1e6

has been achieved using list comprehension, we store those attributes

in equalsToOne array and iterate over them.


'''


multiplier = 'weight'

equalsToOne = ['pedisrem', 'pedisout', 'pedisdrs', 'pedisphy', 'pediseye', 'pedisear']

total_cognitive_m, total_mobility_m, total_self_care_m, \

 total_physical_m, total_vision_m, total_hearing_m = 

[(getattr(adults, multiplier) * getattr(adults, var) == 1).sum()/1e6

 for var in equalsToOne]

total_disabled_m = (adults.weight * adults.disabled).sum()/1e6


查看完整回答
反對 回復 2023-04-11
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

你可以定義一些集合來迭代你的數據,你可以使用一個元組來聲明每個項目的屬性adults.pedisrem,adults.pedisout,adults.pedisdrs, ...然后使用一個數組來存儲每個結果


properties = ("pedisrem","pedisout","pedisdrs")

totalValues = ("total_cognitive_m","total_mobility_m","total_self_care_m")

relationShip = {}

i = 0

for item in properties:

    relationShip[totalValues[i]]  = (adults.weight * (adults[item]==1)).sum()/1e6

    i = i + 1;


print(relationShip);


查看完整回答
反對 回復 2023-04-11
  • 3 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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