Я пытался выяснить, как реализовать функцию, подобную функции VLOOKUP
EXCEL в Python, чтобы объединить несколько наборов данных, используя общее значение.Я нашел способ, который действительно работает, но я чувствую, что это не лучшее решение.В приведенном ниже примере я ограничил свои наборы данных только тремя, чтобы проиллюстрировать свою проблему, но в действительности у меня может быть множество наборов данных
import pandas as pd
import numpy as np
time_a = np.arange(0, 10010, 10)
data_a1 = np.random.randint(1500, 2500, 1001)
data_a2 = np.random.randint(750, 1500, 1001)
time_b = np.arange(0, 10005, 5)
data_b1 = np.random.randint(0, 10, 2001)
data_b2 = np.random.randint(0, 20, 2001)
data_b3 = np.random.randint(0, 15, 2001)
time_c = np.arange(0, 10030, 30)
df_a = pd.DataFrame({'time_a': time_a, 'data_a1': data_a1, 'data_a2': data_a2})
df_b = pd.DataFrame({'time_b': time_b, 'data_b1': data_b1, 'data_b2': data_b2, 'data_b3': data_b3})
df_c = pd.DataFrame({'time_c': time_c})
df_a_c = pd.merge_asof(df_c, df_a, left_on=['time_c'], right_on=['time_a'])
df_a_b_c = pd.merge_asof(df_a_c, df_b, left_on=['time_c'], right_on=['time_b'])
Чтобы это работало, мне нужно использовать pd.merge_asof
дважды, учитывая тот факт, что я получил три набора данных (которых я хотел бы избежать).Поскольку теперь у меня три одинаковых времени (time_a
, time_b
и time_c
), возможно, было бы также удобно переименовать одно из них в time
и удалить два других:
df_a_b_c.rename(columns={'time_c':'time'}, inplace=True)
df_a_b_c.drop(columns=['time_a', 'time_b'])
Вдохновленный https://codereview.stackexchange.com/questions/124964/vlookup-in-python, Я также пытался использовать без всякой удачи
def vlookup(key, table, column, approximate_match=True):
compare = key.__ge__ if approximate_match else key.__eq__
try:
return max(row for row in table if compare(row[0]))[column]
except ValueError:
return None
- Это можно сделать, например, с помощью numpyили мне нужно объехать панды?
- Нужно ли использовать
pd.merge_asof
несколько раз для объединения нескольких наборов данных? - Что если я хочу выбрать только определенные столбцы, а не объединитьвсе наборы данных, это возможно?
- Какова рекомендуемая практика в Python?
Я очень ценю любую помощь.