创建字符串数组

时间:2017-03-09 19:19:39

标签: python pandas numpy

我有各种类型的标志数组:

Data Type1 Type2 Type3
12   1     0     0
14   0     1     0
3    0     1     0
45   0     0     1

我想创建以下数组:

Data TypeName
12   Type1   
14   Type2   
3    Type2   
45   Type3   

我尝试创建一个类型字符串的空数组:

import numpy as np
z1 = np.empty(4, np.string_)
z1[np.where(Type1=1)] = 'Type1'

但这似乎没有给我预期的结果。

编辑: 我可以使用pandas数据帧,每行只有1种类型,Type1,Type2,Type3

EDIT2: 数据类型1类型2类型3是pandas数据帧中的列名,但我使用的是带有隐式名称的numpy数组,如上面的示例所示。

3 个答案:

答案 0 :(得分:2)

更新:这里混合了a brilliant @Divakar's idea使用DataFrame.idxmax(1)方法并使用set_index()reset_index()来摆脱{ {1}}:

pd.concat()

OLD回答:

你可以这样做(熊猫解决方案):

In [142]: df.set_index('Data').idxmax(1).reset_index(name='TypeName')
Out[142]:
   Data TypeName
0    12    Type1
1    14    Type2
2     3    Type2
3    45    Type3

答案 1 :(得分:2)

这是一种滥用的方法,我们每行1只有一个Type1idxmax()pd.concat((df.Data, df.iloc[:,1:].idxmax(1)),axis=1) 开始,每次只发生一次In [42]: df Out[42]: Data Type1 Type2 Type3 0 12 1 0 0 1 14 0 1 0 2 3 0 1 0 3 45 0 0 1 In [43]: pd.concat((df.Data, df.iloc[:,1:].idxmax(1)),axis=1) Out[43]: Data 0 0 12 Type1 1 14 Type2 2 3 Type2 3 45 Type3 行 -

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    // first line
  </div>
  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    // second line
  </div>
</nav>

示例运行 -

book

答案 2 :(得分:1)

执行此操作的一种方法是通过

df.apply(lambda row: 'Type1' if row.Type1 else 'Type2' if row.Type2 else 'Type3', axis=1)

例如:

In [6]: df
Out[6]: 
   Data  Type1  Type2  Type3
0    12      1      0      0
1    14      0      1      0
2     3      0      1      0
3    45      0      0      1

In [7]: df['TypeName'] = df.apply(lambda row: 'Type1' if row.Type1 else 'Type2' if row.Type2 else 'Type3', axis=1)

In [9]: df.drop(['Type1', 'Type2', 'Type3'], axis=1)
Out[9]: 
   Data TypeName
0    12    Type1
1    14    Type2
2     3    Type2
3    45    Type3