python – 根据每行中的值获取列标题

python – 根据每行中的值获取列标题,第1张

概述我有一个pandas数据帧,如下所示(只是一个插图): import datetimetodays_date = datetime.datetime.now().date() index = pd.date_range(todays_date-datetime.timedelta(10), periods=2, freq='D')columnheader=['US', 'Canada', 我有一个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([[3,4,2,1],[1,3,2]])df = pd.DataFrame(data,index=index,columns=columnheader)

结果如下:

US  Canada  UK  Japan2015-07-26   3       4   2      12015-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 Japan2015-07-26  False  False   True  True2015-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      12015-07-26  Japan     UK2015-07-27     US  Japan
总结

以上是内存溢出为你收集整理的python – 根据每行中的值获取列标题全部内容,希望文章能够帮你解决python – 根据每行中的值获取列标题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197353.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存