python - 在 Python DataFrame 中查找最小值列和最小值列名称

标签 python pandas dataframe

我有一个如下所示的矩阵,我需要再创建 2 个列,其中最小值来自列 COL01-04 和该列的名称(不包括 NaN):

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.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

关于python - 在 Python DataFrame 中查找最小值列和最小值列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59879720/

相关文章:

python - 由于 pip 安装错误,无法在 python 2.7.5 中创建 virtualenv 实例

python - 如何更改数据框 Python 中的值

R:如何在每一行中生成最高值的向量?

R,每次在另一列中满足条件时,从数值列中的相应值和后续值中减去一个值

python - Python 在实例化新类时返回什么?

python - 扭曲-工厂对象线程安全吗?

python - 具有单独 Python 后端的 Amazon EC2 文件结构/Web 应用程序?

python - 在 Python 数据框中按年度填补空白的最佳方法

python - 将包含十六进制行的多类型系列转换为 ascii

python - 将参数传递给 pandas.DataFrame.transform 中的函数