我想将所有列的值替换为其各自列的最大值。 例如,从此数据框中:
df0 = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[9,2,3]})
A B C
0 1 4 9
1 2 5 2
2 3 6 3
我想得到:
A B C
0 3 6 9
1 3 6 9
2 3 6 9
应该有一个简单的pandas方法,但是我找不到...
答案 0 :(得分:2)
选中assign
df0.assign(**df0.max())
Out[22]:
A B C
0 3 6 9
1 3 6 9
2 3 6 9
答案 1 :(得分:1)
您可以使用numpy的max
和broadcast_to
:
import numpy as np
pd.DataFrame(np.broadcast_to(df0.values.max(0), df0.shape), columns=df0.columns)
A B C
0 3 6 9
1 3 6 9
2 3 6 9
时间-
df = pd.concat([df0]*10_000, axis=0)
%timeit df.assign(**df.max())
# 2.71 ms ± 194 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df.max()*pd.DataFrame(1, index=df.index, columns=df.columns)
# 6.19 ms ± 951 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit pd.DataFrame(np.broadcast_to(df.values.max(0), df.shape), columns=df.columns)
# 310 µs ± 21.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
答案 2 :(得分:1)
这是一个简单的解决方案。
for column in df0:
df0[column] = df0[column].max()
A B C
0 3 6 9
1 3 6 9
2 3 6 9
答案 3 :(得分:1)
您可以这样做:
df.max()*pd.DataFrame(1, index=df.index, columns=df.columns)
输出:
A B C
0 3 6 9
1 3 6 9
2 3 6 9