我想过滤一个表,选择几个列,处理它们,然后与原始表合并(左联接(。
最初的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()