根据表转换数据框的列名

时间:2015-07-15 05:02:22

标签: python pandas

假设我们有像这样的数据框

   100  101  102
1  0.5  0.1  0.2 
2  0.3  0.4  0.5
3  0.1  0.1  0.1

和这样的表:

1 100 a
2 101 b
3 102 c

我想要的是:

   a    b     c
1  0.5  0.1  0.2 
2  0.3  0.4  0.5
3  0.1  0.1  0.1

2 个答案:

答案 0 :(得分:3)

你的第二个DataFrame缺少列名,所以在这个答案中我称他们为xy;这是我假设第二个DataFrame是:

>> df1
     x  y
0  100  a
1  101  b
2  102  c

此外,我假设第一个DataFrame是df0

您可以使用

执行此操作
df0.columns = [df1[df1.x == c].y.values[0] for c in df0.columns]

说明:

  • df1[df1.x == c].y.values[0]y列中找到与c对应的x列中的值。

  • [... for c in df0.columns]df0中的所有列名称执行此操作。

  • df0.columns = ...将结果指定为df0的新列名。

答案 1 :(得分:3)

我借用@ AmiTavory假设第二帧有xy列(它被轻微改变)。我们可以使用rename方法和columns参数:

>>> df_new = df0.rename(columns=dict(zip(df1.x, df1.y)))
>>> df_new
     a    b    c
1  0.5  0.1  0.2
2  0.3  0.4  0.5
3  0.1  0.1  0.1

这是有效的,因为我们可以使用字典映射columns的旧名称到新名称:

>>> dict(zip(df1.x, df1.y))
{100: 'a', 101: 'b', 102: 'c'}