带有第一行数据的Concat列名,Python 3.6 Dataframe

时间:2017-12-28 15:12:51

标签: python python-3.x pandas dataframe

我想将数据帧第一行的数据添加到其列名称&删除第一行。

Source DataFrame:

2013K2  2013K3  2013K4  2013K5
ABC1    ABC2    ABC3    ABC4
324 5435    543 543
6543    543 657 765
765 876 876 9876

需要将列名重命名为列名+' |' +第一行数据:

2013K2|ABC1 2013K3|ABC2 2013K4|ABC3 2013K5|ABC4
324 5435    543 543
6543    543 657 765
765 876 876 9876

4 个答案:

答案 0 :(得分:6)

IIUC

df.columns=df.columns+'|'+df.iloc[0,:]
df.iloc[1:,]
Out[41]: 
0 2013K2|ABC1 2013K3|ABC2 2013K4|ABC3 2013K5|ABC4
1         324        5435         543         543
2        6543         543         657         765
3         765         876         876        9876
df=df.iloc[1:,]
df
Out[43]: 
0 2013K2|ABC1 2013K3|ABC2 2013K4|ABC3 2013K5|ABC4
1         324        5435         543         543
2        6543         543         657         765
3         765         876         876        9876

答案 1 :(得分:5)

你可以这样做,使用Tset_index,然后使用mapformat将多索引列合并到单个列标题。

df_out = df.T.set_index(0, append=True).T

df_out.columns = df_out.columns.map('{0[0]}|{0[1]}'.format)

df_out

输出:

  2013K2|ABC1 2013K3|ABC2 2013K4|ABC3 2013K5|ABC4
1         324        5435         543         543
2        6543         543         657         765
3         765         876         876        9876

答案 2 :(得分:2)

你可以使用以下单行:

In [148]: df = df.rename(columns=lambda x: x+'|'+df.iloc[0][x]).iloc[1:]

In [149]: df
Out[149]:
  2013K2|ABC1 2013K3|ABC2 2013K4|ABC3 2013K5|ABC4
1         324        5435         543         543
2        6543         543         657         765
3         765         876         876        9876

答案 3 :(得分:0)

可以使用简单的for循环和其他基本函数来创建新的列名列表并更改数据框:

newcols = []             # empty list to have new column names
for i in range(len(df.columns)):
    newcols.append(df.columns[i]+'|'+df.iloc[0,i])  # make and add new name to list
df.columns = newcols     # assign column names
df = df.iloc[1:,:]       # exclude first row

print(df)

输出:

  2013K2|ABC1 2013K3|ABC2 2013K4|ABC3 2013K5|ABC4
1         324        5435         543         543
2        6543         543         657         765
3         765         876         876        9876