Pandas: Суффиксы игнорируются при втором слиянии

Созданный на 10 февр. 2015  ·  3Комментарии  ·  Источник: pandas-dev/pandas

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

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')
Reshaping Usage Question

Самый полезный комментарий

кажется, ты просто этого хочешь?

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

Все 3 Комментарий

кажется, ты просто этого хочешь?

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) он отлично работает.

супер

имейте в виду, что вы обычно не хотите иметь повторяющиеся столбцы

вам может потребоваться многоуровневый результат - используйте аргумент ключей для объединения

Была ли эта страница полезной?
0 / 5 - 0 рейтинги