我有这个数据框:
FamilyVsWWTotal = pd.DataFrame({'date':['2011-4-3','2011-3-5','2011-4-3','2011-5-7'], 'Country':['USA','CAN','USA','MEX']})
所以它会有如下输出:
date Country
2011-4-3 USA
2011-3-5 CAN
2011-4-3 USA
2011-5-7 MEX
然后下面的代码是 2 创建表 1:
Table1=FamilyVsWWTotal
Table1['Region']='K'
因此 Table1 将具有以下输出:
date Country Region
2011-4-3 USA K
2011-3-5 CAN K
2011-4-3 USA K
2011-5-7 MEX K
对于第二个表,即 Table2:
Table2=FamilyVsWWTotal
Table2['aveAge']=60
因此 Table2 的输出应该是这样的:
date Country aveAge
2011-4-3 USA 60
2011-3-5 CAN 60
2011-4-3 USA 60
2011-5-7 MEX 60
但我总是遇到这个问题,即 Table2 输出看起来像这样,它已经混淆了上面的代码:
表2
date Country Region aveAge
2011-4-3 USA K 60
2011-3-5 CAN K 60
2011-4-3 USA K 60
2011-5-7 MEX K 60
任何人都可以提供一些解决此问题的想法?
请您参考如下方法:
你需要copy对于新的 DataFrame 对象,因为其他使用相同的对象(没有复制不是按值复制,而是创建一个新的 reference,所以 id 相同):
Table1=FamilyVsWWTotal.copy()
print (id(Table1))
243907608
print (id(FamilyVsWWTotal))
193392088
#crete new object (unlink to original df)
Table1 = FamilyVsWWTotal.copy()
Table2=FamilyVsWWTotal.copy()
Table1['Region'] = 'K'
Table2['aveAge']=60
print (FamilyVsWWTotal)
Country date
0 USA 2011-4-3
1 CAN 2011-3-5
2 USA 2011-4-3
3 MEX 2011-5-7
print (Table1)
Country date Region
0 USA 2011-4-3 K
1 CAN 2011-3-5 K
2 USA 2011-4-3 K
3 MEX 2011-5-7 K
print (Table2)
Country date aveAge
0 USA 2011-4-3 60
1 CAN 2011-3-5 60
2 USA 2011-4-3 60
3 MEX 2011-5-7 60
#create refernce only
Table1=FamilyVsWWTotal
print (id(Table1))
244095352
print (id(FamilyVsWWTotal))
244095352
仍然修改原始DataFrame FamilyVsWWTotal:
Table1 = FamilyVsWWTotal
Table2=FamilyVsWWTotal
Table1['Region'] = 'K'
Table2['aveAge']=60
print (FamilyVsWWTotal)
Country date Region aveAge
0 USA 2011-4-3 K 60
1 CAN 2011-3-5 K 60
2 USA 2011-4-3 K 60
3 MEX 2011-5-7 K 60
print (Table1)
Country date Region aveAge
0 USA 2011-4-3 K 60
1 CAN 2011-3-5 K 60
2 USA 2011-4-3 K 60
3 MEX 2011-5-7 K 60
print (Table2)
Country date Region aveAge
0 USA 2011-4-3 K 60
1 CAN 2011-3-5 K 60
2 USA 2011-4-3 K 60
3 MEX 2011-5-7 K 60
