У меня есть две панды dataframes:Объединение столбцов из двух dataframes панд и показывая источник для каждой строки
import pandas as pd
a = pd.DataFrame({'key' : [123, 234, 345, 456] })
b = pd.DataFrame({'key' : [ 234, 345, 456, 567 ] })
Что я хочу сделать, это объединить их в единую dataframe с двумя колоннами: одна key
, объединение обоих; а другой source
, список которых из двух исходных данных содержит указанный ключ.
Для приведенного выше входа, я хочу это:
+---+-----+--------+
| | key | source |
+---+-----+--------+
| 0 | 123 | [a] |
| 1 | 234 | [a, b] |
| 2 | 345 | [a, b] |
| 3 | 456 | [a, b] |
| 4 | 567 | [b] |
+---+-----+--------+
У меня есть реализация, которая работает, но (я представляю себе) является чудовищно медленно для больших таблиц:
union = set(a.key)
union.update(b.key)
union_series = pd.Series(data=sorted(list(union)))
def append_ifin_src(urow, acc, (name, src)):
acc.extend([name] if len(src[src==urow]) != 0 else [])
return acc
source_series = union_series.apply(lambda urow : reduce(lambda acc, tocheck : append_ifin_src(urow, acc, tocheck), [('a', a.key), ('b', b.key)], []))
pd.DataFrame({ 'key' : union_series, 'source' : source_series })
Что лучший способ сделать это?