2016-12-04 17 views
4

Я хотел бы знать, как я могу найти разницу между максимальными и минимальными значениями трех столбцов в python. (Имя столбцов POPESTIMATE2010-POPESTIMATE2012) Тогда я должен найти максимальный результат среди всех моих записей. Другими словами, в каком уезде произошло наибольшее абсолютное изменение численности населения в период 2010-2012 годов?Найти максимальное и минимальное значения трех столбцов в python

например. Если в течение трехлетнего периода население округа составляет 100, 80, 130, то самым большим изменением этого периода будет 130-180 | = 50.

enter image description here Вот мой код:

import pandas as pd 
census_df = pd.read_csv('census.csv') 

def answer_one(): 
    return ((census_df['POPESTIMATE2010'],census_df ['POPESTIMATE2011'],census_df ['POPESTIMATE2012']).max()-(census_df['POPESTIMATE2010'],census_df ['POPESTIMATE2011'],census_df ['POPESTIMATE2012']).min()).max() 

answer_one() 
+0

Это те три столбца в DataFrame? – pshep123

ответ

5

я не уверен, что должен быть конечный результат, но если вы хотите, чтобы столбец с самой большой разницей между max и min значение в нем, то вы можете сделать это следующим образом:

>>> df = pd.DataFrame({'a':[3,4,6], 'b':[22,15,6], 'c':[7,18,9]}) 
>>> df 
    a b c 
0 3 22 7 
1 4 15 18 
2 6 6 9 
>>> diff = df.max() - df.min() 
>>> diff 
a  3 
b 16 
c 11 
dtype: int64 
>>> diff.nlargest(1) 
b 16 
dtype: int64 

и если вам нужен только номер затем

>>> diff.max() 
16 

И если вы хотите, чтобы получить разницу между максимальной и минимальной величины в каждой строке, а затем просто сделать это на другом axis:

>>> diff = df.max(axis=1) - df.min(axis=1) 
>>> diff 
0 19 
1 14 
2  3 
>>> diff.max() 
19 
+0

Но я верю, используя ваши цифры, саид хотел бы, чтобы результат был 19 (22 - 3), а не 16. – pshep123

+0

@ pshep123 Я редактировал ответ, когда вы написали комментарий :) Описание не совсем ясное, поэтому я решил чтобы дать больше опций –

+0

Что делать, если 22 и 3 не были в одной колонке? Это даст правильный результат? – pshep123

1

макс (список) дает максимальный элемент в списке.

min (list) дает вам элемент min в списке.

Остальное, что я предполагаю, должно быть достаточно простым для понимания!

+0

Я использовал max и min в соответствии с моим кодом, но я не смог его извлечь. –

+1

вы должны использовать его как max (list) not list.max() – user126885

3
import pandas as pd 
d = {'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]} 
df = pd.DataFrame(d) 

def answer_one(): 
    max_1 = max(df.max()) 
    min_1 = min(df.min()) 
    return max_1 - min_1 

print answer_one() 

, и если вы хотите использовать избранную группу столбцов:

max_1 = max(df[['a','b']].max()) 
+1

почему список? 'max (df.max())' работает одинаково, и то же самое относится к min – Copperfield

+0

Вы абсолютно правы Copperfield. Благодарю. Отредактировал ответ. – pshep123

0

У меня была такая же проблема, как я решил:

f1 = census_df[census_df['SUMLEV'] == 50].set_index(['STNAME','CTYNAME']) 
f1 = f1.ix[:,'POPESTIMATE2010','POPESTIMATE2011','POPESTIMATE2012','POPESTIMATE2013' 
,'POPESTIMATE2014','POPESTIMATE2015']].stack() 
f2 = f1.max(level=['STNAME','CTYNAME']) - f1.min(level=['STNAME','CTYNAME']) 
return f2.idxmax()[1] 
1

Сначала необходимо очистить данные и сохранить только нужные столбцы. Затем транспонируйте свой фрейм данных и получите от них максимум макс и мин, и, наконец, из серии diff получите idxmax.

import pandas as pd 
census_df = pd.read_csv('census.csv') 
ans_df = census_df[census_df["SUMLEV"] == 50]  
ans_df = ans_df[["STNAME", "CTYNAME", "POPESTIMATE2010", "POPESTIMATE2011", "POPESTIMATE2012"]] 
ans_df = ans_df.set_index(["STNAME", "CTYNAME"]) 
diff = ans_df.T.max() - ans_df.T.min() 
diff.idxmax()[1] 
Смежные вопросы