python – 根据每行中的值获取列标题
发布时间:2020-12-20 13:51:47 所属栏目:Python 来源:网络整理
导读:我有一个pandas数据帧,如下所示(只是一个插图): import datetimetodays_date = datetime.datetime.now().date() index = pd.date_range(todays_date-datetime.timedelta(10),periods=2,freq='D')columnheader=['US','Canada','UK','Japan']data=np.array([[
|
我有一个pandas数据帧,如下所示(只是一个插图):
import datetime todays_date = datetime.datetime.now().date() index = pd.date_range(todays_date-datetime.timedelta(10),periods=2,freq='D') columnheader=['US','Canada','UK','Japan'] data=np.array([[3,4,2,1],[1,3,2]]) df = pd.DataFrame(data,index=index,columns=columnheader) 结果如下: US Canada UK Japan 2015-07-26 3 4 2 1 2015-07-27 1 4 3 2 我需要找到每个行的值为1和2的列标题. 所以我应该得到 ['Japan','UK'] ['US','Japan'] 解决方法
您可以执行以下操作,使用isin测试每行的成员资格1,2如果是这样生成一个布尔系列,您可以使用它通过再次调用apply来索引列,我们将其转换为列表,因为维度如果你不这样做,将不会对齐:
In [191]: df.apply(lambda x: x.isin([1,2]),axis=1).apply(lambda x: list(df.columns[x]),axis=1) Out[191]: 2015-07-26 [UK,Japan] 2015-07-27 [US,Japan] Freq: D,dtype: object 内部输出申请: In [192]:
df.apply(lambda x: x.isin([1,axis=1)
Out[192]:
US Canada UK Japan
2015-07-26 False False True True
2015-07-27 True False False True
编辑 如果您想维护订单,那么您可以定义一个func来测试每个值并将其作为一个系列返回: In [209]:
filter_vals=[1,2]
def func(x):
l=[]
for val in filter_vals:
for col in df:
if x[col] == val:
l.append(col)
?
return pd.Series(l)
df.apply(func,axis=1)
Out[209]:
0 1
2015-07-26 Japan UK
2015-07-27 US Japan
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
