2 回答

TA貢獻1876條經驗 獲得超5個贊
使用列表理解來測試產品列表的最小值和最大值:
#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]??
如果性能不重要,可以使用DataFrame.apply
:
df1 = df.iloc[:, 1:]
f = lambda x: x.index[x].tolist()
df['most_sold'] = df1.eq(df1.max(axis=1), axis=0).apply(f, axis=1)
df['least_sold'] = df1.eq(df1.min(axis=1), axis=0).apply(f, axis=1)

TA貢獻1963條經驗 獲得超6個贊
你可以做這樣的事情。
minValueCol = yourDataFrame.idxmin(axis=1)
maxValueCol = yourDataFrame.idxmax(axis=1)
添加回答
舉報