Я пытаюсь объединить несколько фреймов данных с последовательными операциями слияния, я хочу добавить суффикс к имени недавно объединенных имен столбцов. Упрощенная версия моего кода выглядит так:
from pandas import *
f0 = DataFrame(columns=['data'], data=[1,2,3], index=['a','b','c'])
f1 = DataFrame(columns=['data'], data=[4,5,6], index=['c','b','a'])
f2 = DataFrame(columns=['data'], data=[7,8,9], index=['a','c','b'])
merged = f0
merged = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
merged = merged.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
print merged.columns
С pandas 0.15.2 на python 2.7 это возвращает:
Index([u'data_0', u'data_1', u'data'], dtype='object')
в то время как я ожидал
Index([u'data_0', u'data_1', u'data_2'], dtype='object')
кажется, ты просто этого хочешь?
In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]:
0 1 2
a 1 6 7
b 2 5 9
c 3 4 8
суффиксы применяются только в том случае, если есть повторяющиеся столбцы, которых после первого слияния нет (по сравнению с 3-м)
In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
In [47]: merged1
Out[47]:
data_0 data_1
c 3 4
b 2 5
a 1 6
In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]:
data_0 data_1 data
a 1 6 7
c 3 4 8
b 2 5 9
Ах, спасибо за объяснение, я упустил тот факт, что суффиксы применяются только к повторяющимся именам столбцов. И действительно, решение concat проще. И для записи: concat (... ignore_index = True) - это полная противоположность тому, что я хочу, но с concat (... ignore_index = False) он отлично работает.
супер
имейте в виду, что вы обычно не хотите иметь повторяющиеся столбцы
вам может потребоваться многоуровневый результат - используйте аргумент ключей для объединения
Самый полезный комментарий
кажется, ты просто этого хочешь?
суффиксы применяются только в том случае, если есть повторяющиеся столбцы, которых после первого слияния нет (по сравнению с 3-м)