[英]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.min
和DataFrame.idxmin
與axis=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.