This question already has answers here:
Python: how to merge two dataframes on a column by keeping the information of the first one?
                                
                                    (2个答案)
                                
                        
                                5个月前关闭。
            
                    
我有一个不确定性列表,该不确定性对应于我将称为表1的n的特定值。我想将这些不确定性添加到一个综合的大型数据表(表2)中,该表按数字顺序并按n升序排列。 。如何将不确定性附加到正确的对应n值上?
我的第一个问题是,不确定性表是一个表,而不是一个数据框。我有单独的数组,但不确定如何组合成数据框。

 table1 = Table([xrow,yrow])


xrow表示表1中以下'n'的数组,yrow表示相应的错误。

表1的摘录:

 n      error
 1      0.0
 2      0.00496
 3      0.0096
 4      0.00913
 6      0.00555
 8      0.00718
 10     0.00707


table2的摘录:

    n   Energy      g   J   error
0   1   0.000000    1   0     NaN
1   2   1827.486200 1   0   NaN
2   3   3626.681500 1   0   NaN
3   4   5396.686500 1   0   NaN
4   5   6250.149500 1   0   NaN


因此最终结果应如下所示:

    n   Energy      g   J     error
0   1   0.000000    1   0     0
1   2   1827.486200 1   0     0.00496
2   3   3626.681500 1   0     0.0096
3   4   5396.686500 1   0     0.00913
4   5   6250.149500 1   0     NaN


即没有数据的字段仍为空白(例如,在上述情况下,n = 5)

我应该注意到表2中有很多数据(大约30k),而表1中有2.5k。

最佳答案

您可以这样使用.merge

import pandas as pd
from io import StringIO

table1 = pd.read_csv(StringIO("""
 n      error
 1      0.0
 2      0.00496
 3      0.0096
 4      0.00913
 6      0.00555
 8      0.00718
 10     0.00707"""), sep=r"\s+")

table2 = pd.read_csv(StringIO("""
    n   Energy      g   J   error
0   1   0.000000    1   0     NaN
1   2   1827.486200 1   0   NaN
2   3   3626.681500 1   0   NaN
3   4   5396.686500 1   0   NaN
4   5   6250.149500 1   0   NaN"""), sep=r"\s+")

table2["error"] = table1.merge(table2, on="n", how="right")["error_x"]

print(table2)


输出:

   n     Energy  g  J    error
0  1     0.0000  1  0  0.00000
1  2  1827.4862  1  0  0.00496
2  3  3626.6815  1  0  0.00960
3  4  5396.6865  1  0  0.00913
4  5  6250.1495  1  0      NaN


编辑:使用.map应该会表现更好(请参阅评论):

table2["error"] = table2["n"].map(table1.set_index('n')['error'])

关于python - 如何将与“n”相对应的值列表排序到按“n”排序的大表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56951190/

10-11 17:49