首页 > 解决方案 > 如何用另一个数据框替换一个数据框?

问题描述

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

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

但我最终只有 2 行,因为 df1 的先前形状是 2x3

我需要我的输出看起来像

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 的所有内容?

标签: python-3.xpandasdataframereplace

解决方案


我理解目标是在确保不会通过此操作更改的同时分配 to 的内容df2。这似乎可以做到,但可能不是最优雅的方式。与您尝试的主要区别是删除索引和列df1id(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 可以在您的函数内部更改,但是当从函数返回时,它被分配给同一个变量


推荐阅读