【问题标题】:Pandas: replace values of one data frame with values of another data frame based on index and columnPandas:根据索引和列将一个数据帧的值替换为另一个数据帧的值
【发布时间】:2019-05-15 01:09:46
【问题描述】:

我想合并/加入/两个数据框替换索引。

df1 = pd.DataFrame(index=range(5),columns=range(5))
df1 = df1.fillna(0)

df1
    0   1   2   3   4
0   0   0   0   0   0
1   0   0   0   0   0
2   0   0   0   0   0
3   0   0   0   0   0
4   0   0   0   0   0


d = {'2': [1,0,2,0,3], '4': [0,3,0,4,0]}
df2 = pd.DataFrame(data=d)
df2 = df2.iloc[[2,3],:]
df2
    2   4
2   2   0
3   0   4



这是我尝试过的,它显示如下。

pd.concat([df1, df2], axis=1, join_axes=[df1.index])

    0   1   2   3   4   2   4
0   0   0   0   0   0   NaN NaN
1   0   0   0   0   0   NaN NaN
2   0   0   0   0   0   2.0 0.0
3   0   0   0   0   0   0.0 4.0
4   0   0   0   0   0   NaN NaN

我希望合并的数据框是这样的。

    0   1   2   3   4   
0   0   0   0   0   0   
1   0   0   0   0   0   
2   0   0   2.0 0   0   
3   0   0   0   0   4.0 
4   0   0   0   0   0

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用update 注意所有方法,您需要使索引和列的dtype相同,这就是为什么我首先将它们转换为int,因为当您创建df2时,列是str

    df2.columns=df2.columns.astype(int)
    df1.update(df2)
    df1
    Out[961]: 
       0  1    2  3    4
    0  0  0  0.0  0  0.0
    1  0  0  0.0  0  0.0
    2  0  0  2.0  0  0.0
    3  0  0  0.0  0  4.0
    4  0  0  0.0  0  0.0
    

    或reindex_like

    df2=df2.reindex_like(df1).fillna(0)
    df2
    Out[964]: 
         0    1    2    3    4
    0  0.0  0.0  0.0  0.0  0.0
    1  0.0  0.0  0.0  0.0  0.0
    2  0.0  0.0  2.0  0.0  0.0
    3  0.0  0.0  0.0  0.0  4.0
    4  0.0  0.0  0.0  0.0  0.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2016-07-24
      • 2020-03-13
      • 1970-01-01
      • 2023-03-15
      • 2020-08-06
      • 1970-01-01
      相关资源
      最近更新 更多