Соответствие строк на основе значения столбца python pandas - PullRequest
0 голосов
/ 25 апреля 2018

Я работаю с финансовыми данными и хочу сопоставить временные метки двух акций. Формат, который я имею (или могу генерировать):

Большой кадр данных со столбцами [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 голосов
/ 25 апреля 2018

Если у вас есть метки времени в двух столбцах одного и того же кадра данных, вы можете сделать что-то вроде этого:

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)]
0 голосов
/ 25 апреля 2018

Для 2 отдельных фреймов данных:

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