#python #pandas #dataframe
#python #pandas #dataframe
Вопрос:
Я пытаюсь вычесть минимальное значение каждого столбца из всех значений в этом столбце в pandas dataframe. Но при использовании df.describe().min[columnName]
для получения минимального значения этого столбца он возвращает минимальные значения правильно, за исключением последнего столбца, похоже, вместо этого он возвращает стандартное отклонение. Вот пример:
import pandas as pd
import numpy as np
# create dictionary and dataframe
dfDict = {'A': [1,2,3,4], 'B':[2,4,6,8],'C': [3,5,7,9]}
df = pd.DataFrame.from_dict(dfDict)
print(df)
вывод:
A B C
0 1 2 3
1 2 4 5
2 3 6 7
3 4 8 9
Когда мне print(df.describe())
кажется, что это значение в порядке, вывод:
A B C
count 4.000000 4.000000 4.000000
mean 2.500000 5.000000 6.000000
std 1.290994 2.581989 2.581989
min 1.000000 2.000000 3.000000
25% 1.750000 3.500000 4.500000
50% 2.500000 5.000000 6.000000
75% 3.250000 6.500000 7.500000
max 4.000000 8.000000 9.000000
Но когда я print(df.describe().min())
, значение для C не является минимальным значением, а скорее стандартным отклонением, я получаю этот вывод:
A 1.000000
B 2.000000
C 2.581989
dtype: float64
В конечном счете, я хочу вычесть минимальное значение каждого столбца из всех значений в этом столбце. Я попытался сделать это следующим образом:
iterColNames = df.columns.tolist()
for colName in iterColNames:
df[colName] = df[colName]-df.describe().min()[colName]
Это приводит к хорошим значениям для первых двух столбцов, но не для последнего.
Если я print(df)
сейчас, это дает мне такой результат:
A B C
0 0.0 0.0 0.418011
1 1.0 2.0 2.418011
2 2.0 4.0 4.418011
3 3.0 6.0 6.418011
Где вместо этого он должен выдать мне следующий вывод:
A B C
0 0.0 0.0 0.0
1 1.0 2.0 2.0
2 2.0 4.0 4.0
3 3.0 6.0 6.0
Это кажется довольно простым, но я не уверен, в чем причина этой проблемы.
Ценю вашу помощь!
Ответ №1:
print(df.describe().min())
вычислит минимальные значения для (псевдо-) df.describe()
возвращаемого фрейма данных, что, вероятно, не имеет особого смысла.
Вместо этого просто
>>> df.min()
A 1
B 2
C 3
вернет минимумы по столбцам.
Ответ №2:
Это даст вам результат, который вы ищете:
df - df.min()
A B C
0 0 0 0
1 1 2 2
2 2 4 4
3 3 6 6
df.min() вычисляет минимум для каждого столбца. И когда вы вычитаете этот минимум из вашего df, pandas вычтет его из каждого значения в столбце. Нет необходимости использовать циклы for . Старайтесь избегать циклов for при использовании pandas. Pandas использует векторизованные операции, в целом они намного быстрее.
Ответ №3:
В качестве дополнения к другим ответам, которые, как правило, являются лучшими решениями вашего вопроса:
Если вы хотите выбрать определенную строку по индексу в фрейме данных, например df.describe()
, вы можете использовать loc
df.describe().loc['min']
Out:
A 1.0
B 2.0
C 3.0
Name: min, dtype: float64
Чтобы получить желаемый результат
df - df.describe().loc['min']
Out:
A B C
0 0.0 0.0 0.0
1 1.0 2.0 2.0
2 2.0 4.0 4.0
3 3.0 6.0 6.0