用一列替换pandas数据框中的所有列

时间:2017-05-25 16:44:34

标签: python pandas

我有一个pandas数据帧如下:

    0    1    2    3    4
0   a    b    c    d    e
1   f    g    h    i    j
2   k    l    m    n    o
3   p    q    r    s    t

我想用column 1中的值替换数据框中的所有列,因此结果将是

    0    1    2    3    4
0   b    b    b    b    b
1   g    g    g    g    g
2   l    l    l    l    l
3   q    q    q    q    q

你会怎么做熊猫?

3 个答案:

答案 0 :(得分:5)

一种方法是使用[:]在所有列中进行分配,并使用iloc[:,[1]]选择保留列格式的col-1 -

df[:] = df.iloc[:,[1]] # Or df[['1']] if column names are in
               # string sequence from 0 as suggested by @piRSquared

示例运行 -

In [15]: df
Out[15]: 
   0  1  2  3  4
0  a  b  c  d  e
1  f  g  h  i  j
2  k  l  m  n  o
3  p  q  r  s  t

In [16]: df[:] = df.iloc[:,[1]]

In [17]: df
Out[17]: 
   0  1  2  3  4
0  b  b  b  b  b
1  g  g  g  g  g
2  l  l  l  l  l
3  q  q  q  q  q

处理混合dtype数据框

如果您正在处理混合数据类型列,即并非所有列都与列-1具有相同的数据类型,我们需要使其与dtype相同,并且一个方法是将所有列转换为{{1} } dtype。然后,我们可以使用之前建议的方法。因此,转换和分配步骤将是 -

'object'

示例运行 -

df = df.astype('object')
df[:] = df.iloc[:,[1]]

答案 1 :(得分:4)

考虑数据框df

df = pd.DataFrame(np.array(list('abcdefghijklmnopqrst')).reshape(-1, 5))
print(df)

   0  1  2  3  4
0  a  b  c  d  e
1  f  g  h  i  j
2  k  l  m  n  o
3  p  q  r  s  t

重构

pd.DataFrame(
    np.column_stack([df[1].values] * len(df.columns)),
    df.index, df.columns
)

   0  1  2  3  4
0  b  b  b  b  b
1  g  g  g  g  g
2  l  l  l  l  l
3  q  q  q  q  q

答案 2 :(得分:1)

使用np.tile重复

In [1207]: pd.DataFrame(np.tile(df[1].values[:, np.newaxis], len(df.columns)))
Out[1207]:
   0  1  2  3  4
0  b  b  b  b  b
1  g  g  g  g  g
2  l  l  l  l  l
3  q  q  q  q  q

详细

In [1208]: df
Out[1208]:
   0  1  2  3  4
0  a  b  c  d  e
1  f  g  h  i  j
2  k  l  m  n  o
3  p  q  r  s  t