2016-12-15 84 views
1

我有一个数据集,格式如下。Python3,列名 - 数组 - numpy或熊猫

id A B C D E 
100 1 0 0 0 0 
101 0 1 1 0 0 
102 1 0 0 0 0 
103 0 0 0 1 1 

我想将其转换成如下:

100, A 
101, B C 
102, A 
103, D E 

我该怎么办呢?我尝试过numpy argsort,但是我对Python很陌生,并且发现这很具有挑战性。 欣赏此中的任何帮助。

python df3 = df1.set_index("cust_id").apply(lambda col: ','.join(col[lambda x: x == 1].index), axis = 1)

python df3

cust_id 
1375586      ind_cco_fin_ult1 
1050611      ind_cco_fin_ult1 
1050612 ind_deco_fin_ult1,ind_viv_fin_ult1 
dtype: object 

python df2

cust_id 
1375586      ind_cco_fin_ult1 
1050611      ind_cco_fin_ult1 
1050612 ind_ctma_fin_ult1,ind_deco_fin_ult1 
dtype: object 

python metrics.mapk(df2,df3,7)

0.82879818594104293 

```python list1 = [['ind_cco_fin_ult1'],['ind_cco_fin_ult1'],['ind_deco_fin_ult1','ind_viv_fin_ult1']] list2 = [['ind_cco_fin_ult1'],['ind_cco_fin_ult1'],['ind_ctma_fin_ult1 ”, 'ind_deco_fin_ult1']

```

python metrics.mapk(list2,list1,7)

0.83333333333333337 

谢谢你很多的帮助,我可以尝试几个步骤。 我想测试mapk,但应用方法似乎并没有给我真正需要的东西。

回答

2

你可以做这样的事情:

df.set_index("id").apply(lambda row: ' '.join(row[row == 1].index), axis = 1) 

#id 
#100  A 
#101 B C 
#102  A 
#103 D E 
#dtype: object