如何跨索引比较两个DataFrame列,找出相同时间戳的行
解决两个DataFrame按时间戳匹配行的问题
你之前用df1.eq(df2)无效的原因是:这个方法是按索引位置逐行比较,只有同一索引位置的值完全一致才返回True,和值是否存在于另一个DataFrame无关,所以即使时间戳相同但索引不同,结果也会是False。
下面是两种实用的解决方法:
方法1:用isin筛选匹配行
直接筛选出当前DataFrame中时间戳存在于另一个DataFrame的所有行,适用于需要保留原DataFrame结构的场景:
示例代码
import pandas as pd # 构造你的示例数据 df1 = pd.DataFrame({'ts': ['2000-01-01 00:00:00', '2000-01-02 00:00:00', '2000-01-03 00:00:00']}) df2 = pd.DataFrame({'ts': ['2000-01-02 00:00:00', '2000-01-03 00:00:00', '2000-01-04 00:00:00']}) # 从df1中筛选出df2也有的时间戳行 df1_matches = df1[df1['ts'].isin(df2['ts'])] # 从df2中筛选出df1也有的时间戳行 df2_matches = df2[df2['ts'].isin(df1['ts'])]
输出结果
df1_matches:
ts 1 2000-01-02 00:00:00 2 2000-01-03 00:00:00
df2_matches:
ts 0 2000-01-02 00:00:00 1 2000-01-03 00:00:00
方法2:用merge做内连接
如果需要将两个DataFrame中匹配的行合并到一起,用内连接(how='inner')的merge方法,会自动匹配所有相同时间戳的行,不管索引位置:
示例代码
common_rows = pd.merge(df1, df2, on='ts', how='inner')
输出结果
ts 0 2000-01-02 00:00:00 1 2000-01-03 00:00:00
内容的提问来源于stack exchange,提问作者Alyssa S
相关产品推荐
相关产品推荐

