Pandas - 根据列值有条件地选择列名

如何根据python中DataFrame的列值选择列名?非常感谢,


import pandas as pd


foo = pd.DataFrame([['A',1,2,4],['B',3,4,2],['C',5,6,1]], columns=('a', 'x', 'y','z'))

foo.set_index('a')

Out[1]:


a  x  y  z


A  1  2  4


B  3  4  2


C  5  6  1

对于每一行,检查列值,如果值 <= 2,则记录列名称。


对于上面的例子,输出应该是:


Output[2]: 


a  1  2  3


A  x  y  


B  z


C  z


慕村225694
浏览 340回答 2
2回答

吃鸡游戏

使用melt,然后过滤值,然后使用值assign的新键cumcountdf=foo.melt('apple').\&nbsp; &nbsp; &nbsp; &nbsp; loc[lambda x : x.value<=2].\&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assign(value=lambda x : x.groupby('apple').cumcount()+1)df.pivot('apple','value','variable')Out[56]:&nbsp;value&nbsp; 1&nbsp; &nbsp; 2apple&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;A&nbsp; &nbsp; &nbsp; x&nbsp; &nbsp; yB&nbsp; &nbsp; &nbsp; z&nbsp; NaNC&nbsp; &nbsp; &nbsp; z&nbsp; NaN

大话西游666

这是使用列标签mul替换值的一种方法<= 2。然后排序以在每行的末尾放置空字符串。import pandas as pdfoo = 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).valuesfoo.iloc[:, 1:] = pd.DataFrame(arr_sorted.tolist(), columns=foo.columns[1:])print(foo)&nbsp; apple&nbsp; x&nbsp; y z0&nbsp; &nbsp; &nbsp;A&nbsp; x&nbsp; y&nbsp;&nbsp;1&nbsp; &nbsp; &nbsp;B&nbsp; z&nbsp; &nbsp; &nbsp;2&nbsp; &nbsp; &nbsp;C&nbsp; z&nbsp;&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python