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
添加回答
举报