3 回答

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"])

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

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);
添加回答
舉報