簡體   English   中英

在 Python DataFrame 中查找最小值列和最小值列名稱

[英]Find min value column and min value column name in Python DataFrame

我有一個如下所示的矩陣,我需要從 COL01-04 列和該列的名稱(不包括 NaN)中創建另外 2 個具有最小值的列:

In[1]: matrix
Out[1]: 
     ID    COL01  COL02   COL03    COL04
0  0001      NaN   1662    1583   1697.4
1  0002      NaN   1006    1476  1018.44
2  0003     1452   1487  2197.5  1516.27
3  0004      NaN   1554    2298  1585.62

像這樣:

     ID    COL01  COL02   COL03    COL04  Min_val  Min_col
0  0001      NaN   1662    1583   1697.4     1583    COL03
1  0002      NaN   1006    1476  1018.44     1006    COL02
2  0003     1452   1487  2197.5  1516.27     1452    COL01
3  0004      NaN   1554    2298  1585.62     1554    COL02

我已經試過了

for i in range(0, len(matrix)):
    matrix['Min_val'] = matrix[['COL01', 'COL02', 'COL03', 'COL04']].min()

但結果到處都是NaN ,輸入numpy.float64

DataFrame.minDataFrame.idxminaxis=1用於檢查每行的值:

c = ['COL01', 'COL02', 'COL03', 'COL04']
matrix[c] = matrix[c].apply(lambda x: pd.to_numeric(x, errors='coerce'))

matrix['Min_val'] = matrix[c].min(axis=1)
matrix['Min_col'] = matrix[c].idxmin(axis=1)

或者對於新列使用DataFrame.assign

matrix = matrix.assign(Min_val = matrix[c].min(axis=1), Min_col=matrix[c].idxmin(axis=1))

print (matrix)
   ID   COL01  COL02   COL03    COL04  Min_val Min_col
0   1     NaN   1662  1583.0  1697.40   1583.0   COL03
1   2     NaN   1006  1476.0  1018.44   1006.0   COL02
2   3  1452.0   1487  2197.5  1516.27   1452.0   COL01
3   4     NaN   1554  2298.0  1585.62   1554.0   COL02

你可以試試這個:

def get_col(sr):
    name=sr.idxmin()
    value = sr[name]
    return pd.Series([value, name])
df[['Min_val','Min_col']] = df[['COL01','COL02','COL03','COL04']].apply(lambda x : get_col(x), axis=1)

df

     ID   COL01  COL02   COL03    COL04  Min_val Min_col
0  0001     NaN   1662  1583.0  1697.40   1583.0   COL03
1  0002     NaN   1006  1476.0  1018.44   1006.0   COL02
2  0003  1452.0   1487  2197.5  1516.27   1452.0   COL01
3  0004     NaN   1554  2298.0  1585.62   1554.0   COL02

暫無
暫無

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

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