我有以下代码:
data_keys = data.keys()
for i in range(1,len(data_keys)):
multiplier = specie_name_and_initial_values_dict[data_keys[i]]
data[data_keys[i]]=map(lambda x: multiplier*x, data[data_keys[i]])
return data
data_keys是从pandas数据帧派生的密钥列表,即
Index([u'Time', u'Cyp26_G_R1', u'Cyp26_G_rep1'], dtype='object')
数据是一个熊猫数据框,即:
Time Cyp26_G_R1 Cyp26_G_rep1
0 0 0.0 14.0
1 300 0.0 10.0
2 600 1.0 1.5
3 900 2.0 2.0
4 1200 2.5 1.0
5 1500 4.0 0.9
6 1800 2.0 2.0
7 2100 2.5 2.5
8 2400 5.0 2.5
9 2700 6.5 0.5
10 3000 6.0 0.4
11 3300 5.5 0.5
12 3600 1.5 1.5
和specie_name_and_initial_values_dict是一个包含35个键的字典,每个键中有一个值,其中两个键的名称与上面数据框中的列标题相同(不是' Time')。
我试图将数据框的两个数据列乘以我从“specie_name_and_initial_values_dict [data_keys [i]]'中获得的两个值中的每一个。循环内。
我无法粘贴当前输出,因为堆栈溢出不像格式,但当前正在发生的是没有发生乘法,并且迭代地拼接数字,即第一个元素= 240.8856716,第二个= 240.8856716240.8856716和这种情况还在继续。
这显然不是我想要的。有人知道这样做的方法吗?
由于
答案 0 :(得分:2)
您希望将数据框中的列与字典中的值相乘,其中键是列名?使用mul
功能:
In [18]: df
Out[18]:
Time Cyp26_G_R1 Cyp26_G_rep1
0 0 0.0 14.0
1 300 0.0 10.0
2 600 1.0 1.5
3 900 2.0 2.0
4 1200 2.5 1.0
5 1500 4.0 0.9
6 1800 2.0 2.0
7 2100 2.5 2.5
8 2400 5.0 2.5
9 2700 6.5 0.5
10 3000 6.0 0.4
11 3300 5.5 0.5
12 3600 1.5 1.5
In [19]: d
Out[19]: {'Cyp26_G_R1': 100, 'Cyp26_G_rep1': 10}
In [20]: key = 'Cyp26_G_rep1'
我们将增加列' Cyp26_G_rep1'字典d
-
In [21]: df[key] = df[key].mul(d[key])
In [22]: df
Out[22]:
Time Cyp26_G_R1 Cyp26_G_rep1
0 0 0.0 140
1 300 0.0 100
2 600 1.0 15
3 900 2.0 20
4 1200 2.5 10
5 1500 4.0 9
6 1800 2.0 20
7 2100 2.5 25
8 2400 5.0 25
9 2700 6.5 5
10 3000 6.0 4
11 3300 5.5 5
12 3600 1.5 15
答案 1 :(得分:1)
我到处搜索试图完成完全相同的任务。我发现了一个不太理想的解决方案,最近才遇到这个解决方案。我采用了fixxer提供的解决方案并以此为基础。我是StackOverflow的新手,因此,由于我不想弄乱原始答案,因此我将提供第二个答案。
在我的解决方案中,我需要保持原始数据帧不变,因此我创建了一个副本。我也有许多列和key:value组合,可通过它们应用mul()函数。因此,我以这种方式遍历了字典:
df2 = df.copy()
for d_key in d.keys():
key = d_key
df2[key] = df2[key].mul(d[key])
这对我来说很好