我有一个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
你会怎么做熊猫?
答案 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