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

时间:2021-04-23 19:00:20

标签: python pandas

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

原来的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 有没有办法保留原来的索引? 我想使用索引与原始表执行左连接(在对数据做了一些操作之后)。

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用 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()