Pandas使用df.loc保持原始行索引



我想过滤一个表,选择几个列,处理它们,然后与原始表合并(左联接(。

最初的df是这样的:

(pandas index)    source         destination        freq
0                 source_path1   destination_1      day
1                 source_path2   destination_2      hour
2                 source_path3   destination_3      day

然后我使用df.loc过滤并选择一些列:

df_copy_hour=df.loc[df['freq']=="hour", ["source","destination"]]

这给了我一个新的df,但为该行添加了一个新索引:

(pandas index)    source         destination 
0                 source_path2   destination_2

有没有办法让df.loc保持原始索引?我想使用索引来执行与原始表的左联接(在对数据做了一些处理之后(。

感谢

您可以使用where()方法并将loc[]访问器链接到它:

df_copy_hour=df.where(df['freq']=="hour").loc[:,["source","destination"]]

现在,如果您打印df_copy_hour,您将得到:

source        destination
(pandas index)      
0               NaN             NaN
1               source_path2    destination_2
2               NaN             NaN

现在,如果您想删除NaN值,请使用:

df_copy_hour=df_copy_hour.dropna()

所以现在如果你打印df_copy_hour,你会得到:

source         destination
(pandas index)      
1                source_path2   destination_2

您可以通过以下方式在单行中完成此操作:

df_copy_hour=df.where(df['freq']=="hour").loc[:,["source","destination"]].dropna()

最新更新