基于列值python pandas匹配行

时间:2018-04-25 15:28:08

标签: python dataframe match row

我正在处理财务数据,我希望匹配两只股票的时间戳。我拥有(或可以生成)的格式是:

包含[timestamp1, ..., timestamp2, ....]列的大型数据框或两个单独的dataframe,其中列[timestamp1, ..] [timestamp2, ...]的索引类型为integer

我希望得到一个只有dataframe行的大timestamp1 = timestamp2,并注意有可能 df['timestamp1][i] == df['timestamp2][j]其中i!=j

示例数据框可以是:

2018-01-02-07:00:00, salmon, bacon, eggs,  2018-01-02-07:01:00, peanuts, butter, milk

2018-01-02-07:03:00, tuna, avocado, null,  2018-01-02-07:02:00, bacon, bacon, bacon

2018-01-02-07:04:00, salmon, tuna, tuna,  2018-01-02-07:03:00, lettuce, tomato, bacon

正如您所看到的,这是不可解决的 df = df[ df['timestamp1] == df['timestamp2'] ]因为相应时间戳的索引不相等。 请注意,索引类型为int

我确实知道解决它的一种非常繁琐的方法,但它必须以更简单的方式实现(例如,可以通过填写所有不存在的时间戳来解决,使得每个时间戳的索引号将是相同的)

希望你能帮助我,我将永远为你负债!

2 个答案:

答案 0 :(得分:0)

对于2个独立的数据帧:

pd.merge(df1, df2, left_on="timestamp1", right_on="timestamp2", how="inner")

答案 1 :(得分:0)

如果时间戳在同一数据帧的两列中,则可以执行以下操作:

import pandas as pd
import numpy as np

# first find the common values
common = np.intersect1d(df.timestamp1, df.timestamp2)

# now get rows that have these common values
df[df.timestamp1.isin(common) | df.timestamp2.isin(common)]