Python (pandas): как умножить все числа с плавающей точкой в ​​DataFrame на константу - PullRequest
0 голосов
/ 10 апреля 2020

если у меня есть DataFrame, состоящий из нескольких столбцов, которые состоят только из строк, и других столбцов, которые состоят только из числовых типов c (то есть с плавающей точкой или целых чисел), как мне умножить каждый элемент float или int в DataFrame на какая-то константа?

Например, если константа равна 3, и у меня есть этот фрейм данных:

import numpy as np
import pandas as pd

np.random.seed(seed=9876)
df1 = pd.DataFrame(['a']*3+['b'])
df2 = pd.DataFrame(['x','y','z', 't'])
df3 = pd.DataFrame(np.round(np.random.randn(4,2),2)*10)
df = pd.concat([df1, df2, df3], axis = 1)
df.columns = ['ind', 'x1', 'x2','x3']
df = df.set_index('ind')
print(df)
    x1    x2    x3
ind               
a    x   3.9 -10.9
a    y   2.1   3.2
a    z  -9.3   0.3
b    t -11.1  -1.2

Вывод должен выглядеть следующим образом:

    x1    x2    x3
ind               
a    x   11.7   -32.7
a    y   6.3    9.6
a    z  -27.9   0.9
b    t  -33.3   -3.6

One Идея в том, чтобы использовать pd.concat([df['x1'], df.loc[:,['x2', 'x3']].mul(3)], axis = 1), но я не обязательно буду знать ex-ante, которые представляют собой строку против столбцов цифр c при применении этого к многочисленным фреймам данных. Это также кажется неэффективным. Я уверен, что лучший метод существует, но я еще не нашел его.

1 Ответ

2 голосов
/ 10 апреля 2020

Выберите только столбцы с цифрами c от DataFrame.select_dtypes, а затем только с несколькими:

cols = df.select_dtypes(np.number).columns
print (cols)
Index(['x2', 'x3'], dtype='object')

df[cols] = df[cols].mul(3)

print (df)
    x1    x2    x3
ind               
a    x  11.7 -32.7
a    y   6.3   9.6
a    z -27.9   0.9
b    t -33.3  -3.6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...