Pandas: 第二次合并时忽略后缀

创建于 2015-02-10  ·  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

在 python 2.7 上使用 pandas 0.15.2 返回:

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

后缀仅适用于第一次合并后没有重复列的情况(与第三次相比)

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

后缀仅适用于第一次合并后没有重复列的情况(与第三次相比)

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) 效果很好。

gr8

请记住,您通常不希望有重复的列

你可能想要一个多级结果 - 使用 keys 参数来连接

此页面是否有帮助?
0 / 5 - 0 等级