我有一个非常大的数据框,类似于此:
Customer_Id Day Hour Latitude Longitude
0. a dd hh x1 y1
1. a dd hh' x2 y2
2. a dd hh' x3 y3
3. b dd hh' x4 y4
然后有一个对象(可以根据需要将其转换为DataFrame),每个对象每天每个小时的经纬度样本。但是,此处的Customer_Id,Day和Hour是所有索引,而之前则不是。看起来像这样:
Latitude Longitude
Customer_Id Day Hour
a dd hh x1 y1
dd hh' x3 y3
b dd hh' x4 y4
以前,我有两个数据帧,每个数据帧只有一个索引(让我们将它们称为第一个df1,这里是firt数据帧,第二个称为df2,这是我拥有的单个索引数据帧,而不是第二个对象),所以我用了:
df1['Latitude']= np.where((~df1.index.isin(df2.index)), np.nan, df1['Latitude'])
以前,此代码有效,但现在在此新方案下,它将返回此错误:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
我试图相应地更改代码,但是它不起作用。有人可以看看吗?
答案 0 :(得分:1)
您需要使用DataFrame.reset_index
重设索引:
df1['Latitude']= np.where((~df1.index.isin(df2.reset_index().index)), np.nan, df1['Latitude'])
print(df1)
Customer_Id Day Hour Latitude Longitude
0 a dd hh x1 y1
1 a dd hh' x2 y2
2 a dd hh' x3 y3
3 b dd hh' NaN y4
reset_index有什么作用?
它将索引转换回列:
print(df2.reset_index())
Customer_Id Day Hour Latitude Longitude
0 a dd hh x1 y1
1 a dd hh' x3 y3
2 b dd hh' x4 y4