2 回答

TA貢獻1829條經驗 獲得超7個贊
使用melt,然后過濾值,然后使用值assign的新鍵cumcount
df=foo.melt('apple').\
loc[lambda x : x.value<=2].\
assign(value=lambda x : x.groupby('apple').cumcount()+1)
df.pivot('apple','value','variable')
Out[56]:
value 1 2
apple
A x y
B z NaN
C z NaN

TA貢獻1817條經驗 獲得超14個贊
這是使用列標簽mul替換值的一種方法<= 2。然后排序以在每行的末尾放置空字符串。
import pandas as pd
foo = pd.DataFrame([['A',1,2,4],['B',3,4,2],['C',5,6,1]], columns=('apple', 'x', 'y','z'))
arr = (foo.iloc[:, 1:] <= 2).mul(foo.columns[1:].to_series(), axis=1)
arr_sorted = arr.apply(sorted, key=bool, reverse=True, axis=1).values
foo.iloc[:, 1:] = pd.DataFrame(arr_sorted.tolist(), columns=foo.columns[1:])
print(foo)
apple x y z
0 A x y
1 B z
2 C z
添加回答
舉報