如何用另一个数据框替换一个数据框?

时间:2020-11-05 19:29:46

标签: python-3.x pandas dataframe replace

我正在传递单个数据帧以执行各种其他数据清理过程。这样做时,如果没有另一个数据框,我将无法完成其中一个过程。

data= {'ID':[1,2], '2020-11-01' :[10,15], '2020-11-02':[43,35]}
df1 = pd.DataFrame.from_dict(data)
df1.head()


    ID  2020-11-01  2020-11-02
0   1   10  43
1   2   15  35

我需要将这些日期转换为行,以便融化

df2 = df1.melt(id_vars = ["ID"], var_name = "ReportDate", value_name= "Units")
df2.head()

    ID  ReportDate  Units
0   1   2020-11-01  10
1   2   2020-11-01  15
2   1   2020-11-02  43
3   2   2020-11-02  35

现在,我需要删除df1中的所有内容,并需要将df2详细信息捕获到df1中。

我尝试删除df1中的所有列(使用inplace = True),然后执行

df1["ID"] = df2["ID"]
df1["ReportDate"] = df2["ReportDate"]
df1["Units] = df2[Units]
df1.head()

    ID  ReportDate  Units
0   1   2020-11-01  10
1   2   2020-11-01  15

但是由于df1的先前形状是2x3,所以我只剩下2行

我需要我的输出看起来像

df1.head()

    ID  ReportDate  Units
0   1   2020-11-01  10
1   2   2020-11-01  15
2   1   2020-11-02  43
3   2   2020-11-02  35

如何使df1具有df2的所有内容?

1 个答案:

答案 0 :(得分:1)

我了解目标是将df2的内容分配给df1,同时确保id(df1)不会因该操作而改变。这似乎可以做到,但可能不是最优雅的方式。与您尝试的主要区别在于删除索引以及列

df1.drop(df1.columns, axis=1, inplace=True)
df1.drop(df1.index,  inplace=True)
df1[df2.columns] = df2[df2.columns]
df1.head()

最好设计一个具有功能的process_data

df1 = process_data(df1)

然后可以在函数内部更改df1,但是当从函数返回df1时,会将其分配给相同的变量