#python #pandas
#python #pandas
Вопрос:
У меня есть фрейм данных, как показано ниже:
0 1 2 ... 62 63 64
795 89.0 92.0 89.0 ... 74.0 64.0 4.0
575 80.0 75.0 78.0 ... 70.0 68.0 3.0
1119 2694.0 2437.0 2227.0 ... 4004.0 4010.0 6.0
777 90.0 88.0 88.0 ... 71.0 67.0 4.0
506 82.0 73.0 77.0 ... 69.0 64.0 2.0
... ... ... ... ... ... ... ...
65 84.0 77.0 78.0 ... 78.0 80.0 0.0
1368 4021.0 3999.0 4064.0 ... 1.0 4094.0 8.0
1036 80.0 80.0 79.0 ... 73.0 66.0 5.0
1391 3894.0 3915.0 3973.0 ... 4.0 4090.0 8.0
345 81.0 74.0 75.0 ... 80.0 75.0 1.0
Я хочу разделить все элементы более 1000 в этом фрейме данных на 100. Так 4021.0
становится 40.21
и так далее.
Я пробовал что-то вроде приведенного ниже:
for cols in df:
for rows in df[cols]:
print(df[cols][rows])
Я получаю индекс из связанных ошибок. Я просто не уверен, как правильно выполнить итерацию так, как я ищу.
Ответ №1:
Я думаю, что циклы здесь медленные, поэтому лучше использовать решения для векторизации — выбирать значения, которые больше нравятся 1000
, и делить:
df[df.gt(1000)] = df.div(100)
Или с помощью DataFrame.mask
:
df = df.mask(df.gt(1000), df.div(100))
print (df)
0 1 2 62 63 64
795 89.00 92.00 89.00 74.00 64.00 4.0
575 80.00 75.00 78.00 70.00 68.00 3.0
1119 26.94 24.37 22.27 40.04 40.10 6.0
777 90.00 88.00 88.00 71.00 67.00 4.0
506 82.00 73.00 77.00 69.00 64.00 2.0
65 84.00 77.00 78.00 78.00 80.00 0.0
1368 40.21 39.99 40.64 1.00 40.94 8.0
1036 80.00 80.00 79.00 73.00 66.00 5.0
1391 38.94 39.15 39.73 4.00 40.90 8.0
345 81.00 74.00 75.00 80.00 75.00 1.0
Ответ №2:
Вы можете использовать функцию applymap и создать свою пользовательскую функцию
def mapper_function(x):
if x >= 1000:
x=x/100
else:
x
return x
df=df.applymap(mapper_function)