每一列的摘要:
S M ΔE
0 0+X1Sigmag+0 0+X1Sigmag+0 0.000000
1 0+X1Sigmag+1 2+X1Sigmag+0 0.008930
2 0+X1Sigmag+2 4+X1Sigmag+0 0.002009
3 0+X1Sigmag+3 6+X1Sigmag+0 0.001273
4 0+b3Sigmag-0 8+X1Sigmag+0 0.005600
5 0+X1Sigmag+4 10+X1Sigmag+0 0.001979
6 0+b3Sigmag-1 12+X1Sigmag+0 0.001763
7 0+X1Sigmag+5 14+X1Sigmag+0 0.001962
8 0+b3Sigmag-2 16+X1Sigmag+0 0.006180
9 0+X1Sigmag+6 2-a3Piu0 0.004950
10 0+b3Sigmag-3 3-a3Piu0 0.005230
很明显,第一个匹配,所以我将第1行的不确定性附加为0(其Python为0)
S = pd.DataFrame(data1, columns= ['Properties']).values
M = pd.DataFrame(data2, columns= ['Properties']).values
我已组织成两个数据框,目前正在使用:
equal_indices = []
for i in range(len(S)):
for j in range(len(M)):
if S[i] == M[j] and M[i]==S[j]:
equal_indices.append(j [have also tried i])
print(i,j)
它花费的时间太长,没有任何用处...长度是一个问题,因为一旦我成功地管理了此数据,我将输入更大的数据值。
我想最终得到一个看起来像这样的代码(我组成的其他行,但第一行是正确的),但是对于许多匹配项:
ith row matched property resultant uncertainty
0 0+X1Sigmag+0 0.000000
17 0+b3Sigmag-2 0.060789
450 2-a3Piu 0.005230
非常感谢您!
答案 0 :(得分:0)
if S[i] == M[j] and M[i]==S[j]:
如果S和M的长度不同,那么用i索引M以及用j索引S显然是错误的。
if S[i] == M[j]:
试试看;如果结果正确,但速度太慢,我们可以开始进行优化。
如何在整个columnS数据集上附加第三列(与那些j值相对应)
为了连接两组数据,我们可以忘记上面的循环并使用(正如krewsayder所建议的那样)DataFrame.merge:
data = data1.merge(data2, 'left', 'Properties')
合并类型'left'
保留了更全面 data1
集的键顺序,您不想对其进行重新排序。
答案 1 :(得分:0)
首先,欢迎堆栈溢出。
您可以合并列中的两个数据框,以得到完全匹配,前提是您想要的结果为DataS = DataM?
这将返回数据,就像您在SQL中进行了内部联接一样,左/右键由left_on / right_on表示。
DataM.index.name = 'M RowNum'
DataS.index.name = 'S RowNum'
Matched = DataS.reset_index()\
.merge(DataM.reset_index(), left_on = 'S', right_on = 'M', how = 'inner')
如果您要从任一索引中选择行索引,则可以添加一种方法来重置索引,例如附加到任一数据帧的DataS.reset_index()
。