Python 对于每一行,返回最小值的列名-熊猫
假设我有一个具有以下值的数据帧:Python 对于每一行,返回最小值的列名-熊猫,python,pandas,list,max,min,Python,Pandas,List,Max,Min,假设我有一个具有以下值的数据帧: id product1sold product2sold product3sold 1 2 3 3 2 0 0 5 3 3 2 1 如何在每个id的列表中添加包含所有最畅销和最畅销产品的“最畅销”和“最畅销”列? 应该是这样的 id product1 prod
id product1sold product2sold product3sold
1 2 3 3
2 0 0 5
3 3 2 1
如何在每个id的列表中添加包含所有最畅销和最畅销产品的“最畅销”和“最畅销”列?
应该是这样的
id product1 product2 product3 most_sold least_sold
1 2 3 3 [product2, product3] [product1]
2 0 0 5 [product3] [product1, product2]
3 3 2 1 [product1] [product3]
使用列表理解测试产品列表的最小值和最大值:
#select all columns without first
df1 = df.iloc[:, 1:]
cols = df1.columns.to_numpy()
df['most_sold'] = [cols[x].tolist() for x in df1.eq(df1.max(axis=1), axis=0).to_numpy()]
df['least_sold'] = [cols[x].tolist() for x in df1.eq(df1.min(axis=1), axis=0).to_numpy()]
print (df)
id product1sold product2sold product3sold most_sold \
0 1 2 3 3 [product2sold, product3sold]
1 2 0 0 5 [product3sold]
2 3 3 2 1 [product1sold]
least_sold
0 [product1sold]
1 [product1sold, product2sold]
2 [product3sold]
如果性能不重要,则可以使用:
你可以这样做
id product1 product2 product3 most_sold least_sold
1 2 3 3 [product2, product3] [product1]
2 0 0 5 [product3] [product1, product2]
3 3 2 1 [product1] [product3]
minValueCol=yourDataFrame.idxmin(axis=1)
maxValueCol=yourDataFrame.idxmax(axis=1)