我正在传递单个数据帧以执行各种其他数据清理过程。这样做时,如果没有另一个数据框,我将无法完成其中一个过程。
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的所有内容?
答案 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时,会将其分配给相同的变量