将max应用于数据框的每一列

时间:2019-09-20 14:57:45

标签: python pandas max

我想将所有列的值替换为其各自列的最大值。 例如,从此数据框中:

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方法,但是我找不到...

4 个答案:

答案 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的maxbroadcast_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