применить максимум к каждому столбцу данных - PullRequest
3 голосов
/ 20 сентября 2019

Я хотел бы заменить все значения столбцов на максимальное значение соответствующих столбцов.Например, из этого кадра данных:

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

Должен быть простой способ использования панд с apply, но я не могу его найти ...

Ответы [ 4 ]

2 голосов
/ 20 сентября 2019

Чек assign

df0.assign(**df0.max())
Out[22]: 
   A  B  C
0  3  6  9
1  3  6  9
2  3  6  9
1 голос
/ 20 сентября 2019

Вы можете сделать:

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
1 голос
/ 20 сентября 2019

Вот простое решение.

for column in df0:
    df0[column] = df0[column].max()


   A  B  C
0  3  6  9
1  3  6  9
2  3  6  9


1 голос
/ 20 сентября 2019

Вы можете использовать Numpy's 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)
...