我想通过比较两个差分数据帧(a和B(的值来进行数学运算。
A = pd.DataFrame({'a':[1,1,2,2],'s':[10,20,30,40]})
B = pd.DataFrame({'a':[1,2],'I':[5,10]})
我想在a调用a[‘s’]中添加一列,其中元素等于s/(1+I(,其中I是B[‘I’]的值,它们与等于a[‘a’]的列B[‘a‘]的值具有相同的索引。我尝试使用:
A['ss'] = A['s'].apply(lambda s: s/(1+ B['I'].loc[ A['a'].loc[A['s'] == s] == B['a'] ] ) )
但我有
ValueError: Can only compare identically-labeled Series objects
首先在a
上合并两者可能是最简单的,这将填充I
:的正确值
A2 = A.merge(B, on='a', how='left')
A2现在看起来是这样的:
a s I
0 1 10 5
1 1 20 5
2 2 30 10
3 2 40 10
因此您可以将您的操作应用于A2:
A2['ss'] = A2['s']/(1+A2['I'])