Есть ли способ выровнять несколько серий панд или фреймов данных.
Допустим, у меня есть список серий панд, и я хочу:
- сохранить только элементы индекса, которые присутствуютво всех сериях (внутреннее объединение)
- во всех сериях есть элементы индекса, которые являются объединением всех индексов (внешнее объединение)
Следующий код достигает того, что я хочу (для внутреннего и внешнего)объединение)
import pandas as pd
import itertools
def align(pd_objects, join='outer', axis=0):
"""apply align on all combinations of the list of pd objects"""
for (i, j) in itertools.combinations(range(len(pd_objects)), 2):
(pd_objects[i], pd_objects[j]) = pd_objects[i].align(pd_objects[j], join, axis)
return tuple(pd_objects)
s_1 = pd.Series(['a', 'b', 'c', 'd'], index=[1, 2, 3, 4])
s_2 = pd.Series(['b', 'c', 'd'], index=[2, 3, 4])
s_3 = pd.Series(['a', 'b', 'c'], index=[1, 2, 3])
Где:
(s_1x, s_2x, s_3x) = align([s_1, s_2, s_3], join='inner', axis=0)
Возвращает три серии с индексами ['b', 'c']
И:
(s_1y, s_2y, s_3y) = align([s_1, s_2, s_3], join='outer', axis=0)
Возвращает три серии с индексами ['a', 'b', 'c', 'd']
Но я думаю, что есть гораздо более эффективный и питонский способ сделать это