簡體   English   中英

查找多個數字列的最大值和最小值,並返回 dataframe 和相應的行值

[英]Find max and min value for several numeric column and return dataframe with the corresponding row value

我有以下數據集

在此處輸入圖像描述

對於每一年的列,我想找到最大值和最小值,並返回“最大值”和“最小值”以及每個值對應的“地理”值。

例如,對於“1950”、“1951”等,我想生成如下所示的 dataframe:

在此處輸入圖像描述

是一個類似的線程,但那里建議的方法似乎不起作用,因為我的列有數字標題,而且我想要的結果略有不同。

任何意見將是有益的。 謝謝。

這應該可行,但肯定存在更好的解決方案。 我假設你最初的 dataframe 是一個名為 df 的 pandas dataframe。

dff = pd.DataFrame({'row_labels':['Max_value','Max_geo','Min_value','Min_geo']})

for col in df.columns[2:]: #start at column 1950
    col_list = []
    col_list.append(df[col].min())
    col_list.append(df.loc[df[col] == df[col].min(),'Geo'].values[0])
    col_list.append(df[col].max())
    col_list.append(df.loc[df[col] == df[col].max(),'Geo'].values[0])

    dff[col] = col_list

dff.set_index('row_labels', inplace = True, drop = True)

    

您可以使用maxminidxmaxidxmin執行此操作,而無需循環或進行任何值比較來查找最大值,如下所示(假設您的 dataframe 是df ):

(df.melt(id_vars='Geo', var_name='year')
   .set_index('geo')
   .groupby('year')
   .agg({'value': ('max', 'idxmax', 'min', 'idxmin')})
   .T)

您可以將df.set_indexstackGroupby.agg一起使用:

In [1915]: df = pd.DataFrame({'Geo':['Afghanistan', 'Albania', 'Algeria', 'Angola'], 'Geo code':[4,8,12,24], '1950':[27.638, 54.191, 42.087, 35.524], '1951':[27.878, 54.399, 42.282, 35.599]})

In [1914]: df
Out[1914]: 
           Geo  Geo code    1950    1951
0  Afghanistan         4  27.638  27.878
1      Albania         8  54.191  54.399
2      Algeria        12  42.087  42.282
3       Angola        24  35.524  35.599

In [1916]: x = df.set_index('Geo').stack().reset_index(level=1, name='value').query('level_1 != "Geo code"')

In [1917]: res = x.groupby('level_1').agg({'value': ('max', 'idxmax', 'min', 'idxmin')}).T

In [1918]: res
Out[1918]: 
level_1              1950         1951
value max          54.191       54.399
      idxmax      Albania      Albania
      min          27.638       27.878
      idxmin  Afghanistan  Afghanistan

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM