разделить элементы pandas dataframe на максимальную строку

Интересно, как разделить элементы в DataFrame на его строку max. См. следующий код:

index = pd.date_range('1/1/2000', periods=8)
df = DataFrame(np.random.randn(8, 3), index=index, columns=['A', 'B', 'C'])
dfMax = df.max(axis=1)

а затем элементы в df будут разделены на dfMax на основе одной и той же строки. У кого-нибудь есть идея?


person perigee    schedule 25.06.2013    source источник


Ответы (1)


Я почти уверен, что вы можете просто использовать df.divide()

If df is

                   A         B         C
2000-01-01 -1.420930 -0.836832  0.941576
2000-01-02 -1.011576  0.297129  0.768809
2000-01-03  0.482838  0.331886  1.573922
2000-01-04 -1.359400 -0.909661  1.144215
2000-01-05  0.142007 -1.600080  2.160389
2000-01-06 -0.782341  0.452034  0.242853
2000-01-07  0.414489 -1.319712 -0.129439
2000-01-08 -0.817271 -1.073293  1.689901

и dfMax:

2000-01-01    0.941576
2000-01-02    0.768809
2000-01-03    1.573922
2000-01-04    1.144215
2000-01-05    2.160389
2000-01-06    0.452034
2000-01-07    0.414489
2000-01-08    1.689901

Затем df.divide(dfMax, axis=0) дает вам:

                   A         B         C
2000-01-01 -1.509098 -0.888757  1.000000
2000-01-02 -1.315771  0.386480  1.000000
2000-01-03  0.306774  0.210866  1.000000
2000-01-04 -1.188064 -0.795009  1.000000
2000-01-05  0.065732 -0.740644  1.000000
2000-01-06 -1.730712  1.000000  0.537245
2000-01-07  1.000000 -3.183953 -0.312285
2000-01-08 -0.483621 -0.635122  1.000000
person Matti John    schedule 25.06.2013
comment
Большое спасибо, еще один вопрос, если элементы являются целыми числами, как я могу преобразовать их в числа с плавающей запятой, попробовал astype, но не работает - person perigee; 25.06.2013
comment
Еще есть один вопрос, как мне быть со случаем, когда dfMax содержит нули. Поскольку данные в dfDiv = df.divide() будут содержать бесконечность... спасибо заранее - person perigee; 25.06.2013
comment
неважно снова :-D, решается: dfDiv[np.isinf(dfDiv)] = np.nan - person perigee; 25.06.2013