【问题标题】:Replacing values in a Pandas DataFrames with similar indexes用相似的索引替换 Pandas DataFrames 中的值
【发布时间】:2018-11-14 09:16:13
【问题描述】:

我有两个索引相似但不相等的数据框:

df1 = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'), index = list      ('IJKLMNOPQR')) 



df2 = pd.DataFrame({'1': [1,2,3,4,5,6,7], '2':[3,4,5,6,7,8,9]}, index =list('IQLMRFW') )

我想做的是用 df2 的第 1 列中的值替换 df1 A 列中的值,其中 df1 和 df1 共享一个索引值。例如,随机值 df1[I, A] 将替换为 df2[I, 1] 的值。

有没有比使用 for 循环更有效的方法?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果您只想更改 df1 中的 A 列,请使用 Series.update

    df1['A'].update(df2['1'])
    
    print(df1)
    
              A         B         C         D
    I  1.000000  0.047654  0.260428  0.391113
    J  0.305520  0.021654  0.634946  0.084545
    K  0.577922  0.846770  0.783604  0.330981
    L  3.000000  0.566063  0.620431  0.490843
    M  4.000000  0.612603  0.145364  0.701902
    N  0.665450  0.910101  0.909424  0.574349
    O  0.245765  0.457923  0.383724  0.945154
    P  0.301374  0.674204  0.029119  0.011912
    Q  2.000000  0.680618  0.041484  0.783958
    R  5.000000  0.192027  0.851710  0.330989  
    

    【讨论】:

    • T.Ray,谢谢。您的评论正是我想要的。
    【解决方案2】:

    更改 df2 的列,并使用 update

    df2.columns=['A','B']
    df1.update(df2)
    df1
    Out[448]: 
              A         B         C         D
    I  1.000000  3.000000  0.792863  0.501980
    J  0.545532  0.142258  0.814975  0.207339
    K  0.335758  0.114109  0.864096  0.435545
    L  3.000000  5.000000  0.106752  0.983470
    M  4.000000  6.000000  0.314330  0.793173
    N  0.715468  0.248352  0.670970  0.571507
    O  0.963878  0.450892  0.342048  0.498544
    P  0.880807  0.834060  0.905670  0.015289
    Q  2.000000  4.000000  0.587087  0.744085
    R  5.000000  7.000000  0.114770  0.776954
    

    【讨论】:

      【解决方案3】:

      您可以使用以下代码:

      df1.loc[[value for value in df2.index.values if value in df1.index.values],'A'] = df2['1']
      

      输出是:

            A           B        C           D
      I   1.000000    0.747035    0.318160    0.377931
      J   0.552534    0.463665    0.338471    0.973440
      K   0.584753    0.746475    0.276260    0.587056
      L   3.000000    0.661161    0.955711    0.400889
      M   4.000000    0.148509    0.434616    0.308061
      N   0.837274    0.005138    0.136240    0.449102
      O   0.877274    0.439709    0.600163    0.359086
      P   0.041142    0.789117    0.924934    0.872771
      Q   2.000000    0.607324    0.201463    0.875181
      R   5.000000    0.497730    0.207983    0.574494
      

      【讨论】:

        猜你喜欢
        • 2015-06-02
        • 2014-04-29
        • 2016-10-10
        • 2019-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-01
        • 2021-07-08
        相关资源
        最近更新 更多