Pandas:合并两个数据帧时控制新的列名?

时间:2015-12-17 15:34:25

标签: python pandas

我想将两个Pandas数据帧合并在一起并控制新列值的名称。

我最初是从CSV文件创建的数据帧。原始CSV文件如下所示:

   # presents.csv
   org,name,items,spend...
   12A,Clerkenwell,151,435,...
   12B,Liverpool Street,37,212,...
   ...
   # trees.csv
   org,name,items,spend...
   12A,Clerkenwell,0,0,...
   12B,Liverpool Street,2,92,...
   ...

现在我有两个数据框:

df_presents = pd.read_csv(StringIO(presents_txt))
df_trees = pd.read_csv(StringIO(trees_txt))

我想将它们合并在一起以获取最终数据框,加入orgname值,然后使用适当的前缀为所有其他列添加前缀。

org,name,presents_items,presents_spend,trees_items,trees_spend...
12A,Clerkenwell,151,435,0,0,...
12B,Liverpool Street,37,212,2,92,...

我一直在阅读merging and joining上的文档。这似乎正确合并并产生正确的列数:

ad = pd.DataFrame.merge(df_presents, df_trees,
                        on=['practice', 'name'],
                        how='outer')

但是,print list(aggregate_data.columns.values)正在向我显示以下列:

[org', u'name', u'spend_x', u'spend_y', u'items_x', u'items_y'...]

如何将spend_x重命名为presents_spend等?

3 个答案:

答案 0 :(得分:12)

合并功能中的suffixes选项执行此操作。 defaultssuffixes=('_x', '_y')

通常,可以使用rename方法重命名列。

答案 1 :(得分:2)

您可以通过设置重命名 ad 的所有列,如下所示。

ad.columns = ['org', 'name', 'presents_spend', 'trees_spend']

答案 2 :(得分:0)

另一种方法是在合并前将后缀添加到数据框的列中:

ad.columns = 'ad_' + ad.columns.values