怎么找出行里大于0的最小值,并返回其对应的列名,并增加新列

怎么找出行里大于0的最小值,并返回其对应的列名,见下图:

img
我要得到5639行4.0这个数值所都应的列160列名,并增加一个新列1601赋值160这个数据,不是赋值4.0。


df['new'] = df[df != 0].idxmin(axis=1)

补充一下,是求出每一行的大于0的最小值,并增加一列(这个列名随便起)赋值大于0的最小值对应的列名(如160这个列名,转换为整数作为新列的数值)。

给你两个思路,第一个和0做个相减,获取的结果最小的那个就是最小列,第二个,排个序,把0除外,取第一个或最后一个。

# -*- coding:utf-8 -*-
import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.random.random(size=(8, 4)), index=range(8),
                   columns=['A', 'B', 'C', 'D'])  # 生成示例矩阵,列号用A-D表示,行号用数字表示
print(df1)  # 测试输出原矩阵
max_num = df1.shape[0]  # 行数
df1['min'] = None  # 新建一列用于存储最小的索引,初始值为NaN
for each in range(max_num):
    print(min(num for num in df1.iloc[each, :df1.shape[1] - 1]))
    min_num = min(num for num in df1.iloc[each, :df1.shape[1] - 1])
    df1.at[each, 'min'] = df1.iloc[each, (df1.iloc[each] == min_num).values].index[0]
print(df1)  # 测试输出目标矩阵

现场学习dataframe相关知识.JPG
有帮助望采纳

import numpy as np
import pandas as pd


def custom_min(row: pd.Series):
    # 截取大于 0 的数据
    row = row[row > 0]
    # 返回 row 中最小值的索引
    return row.idxmin()

# 生成随机矩阵
df = pd.DataFrame(np.random.randn(10, 7), columns=list('ABCDEFG'))
# print(df)
# 为每一行数据应用 custom_min 方法, 返回一个series
series = df.apply(func=custom_min, axis=1)
# print(series)
# 添加一列
df["new"] = series
print(df)

img

一个比一个简洁