在python中,我试图根据另一个列值的条件更新pandas dataframe列值。每个列名都有数字后缀来关联它们。下面是一个数据框架的例子:
Nodes_2 = pd.DataFrame([[0, 0, 37.76, 0, 0, 1, 28.32], [0, 0, 45.59, 0, 0, 1, 34.19], [22.68, 0, 22.68, 1, 0, 1, 34.02], [0, 0, 41.03, 0, 0, 1, 30.77], [20.25, 0, 20.25, 1, 0, 1, 30.37]], columns=['ait1', 'ait2', 'ait3', 'Type1', 'Type2', 'Type3', 'Flow'])
和相关的"类型"列表:
TypeNums = [1, 2, 3, 4, 5, 6, 7, 8]
具体来说,我试图更新值在'ait'列与'流'值,如果'类型'值等于1;如果"Type"值等于0,则"ait"值应该为0。
我尝试应用这些条件是不工作的,因为它是挂在我如何尝试使用字符串格式引用列。见下文:
for num in TypeNums:
if Nodes_2['Type{}'.format(num)] == 1:
Nodes_2['ait{}'.format(num)] == Nodes_2['Flow']
elif Nodes_2['Type{}'.format(num)] == 0:
Nodes_2['ait{}'.format(num)] == 0
也就是说,我应该如何使用它们的数字后缀来调用列,而不需要在调用每个名称时输入重复的代码?这是应用上述条件的正确方法吗?
谢谢!
正确的方法是使用np.where
,或者在您的情况下,只是简单的乘法:
for num in TypeNums:
Nodes_2['ait{}'.format(num)] = Nodes_2['Type{}'.format(num)] * Nodes_2['Flow']
或者,您可以一次将所有列相乘:
Nodes_2[['ait{}'.format(num) for num in TypeNums]] = Nodes_2[['Type{}'.format(num) for num in TypeNums]].mul(Nodes_2['Flow'], axis='rows').to_numpy()