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

时间:2015-08-05 14:07:11

标签: python pandas

我有一个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,4,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']

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作,使用1,2测试isin成员资格的每一行,如果是,则生成一个布尔系列,您可以通过调用{{1来使用它来索引列再次,我们将其转换为列表,因为如果您不这样做,维度将不会对齐:

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 的输出:

apply

修改

如果您想维护订单,那么您可以定义一个func来测试每个值并将其作为一个系列返回:

In [192]:
df.apply(lambda x: x.isin([1,2]), axis=1)

Out[192]:
               US Canada     UK Japan
2015-07-26  False  False   True  True
2015-07-27   True  False  False  True