【问题标题】:creating a binary vector from the dataframe column values从数据框列值创建二进制向量
【发布时间】:2020-04-28 19:10:12
【问题描述】:

我有一个数据框df

    ID   KD     DT   
0    1    2     5.6  
1    1    5     8.7  
4    4    9     1.9  
5    4    2     1.7  
6    4    7     8.8  
2    6    9     8.3  
3    6    7     7.2  
9    7   36     3.1  
10   7    2     2.2  
12   7    7     5.6

我想创建一个数据框,以便为每个唯一的KD 值添加新的{-1,0,1} 列,具体取决于ID(来自ID 值列表)和DTID = [1,2,4,6,7,8]。新数据框应该有len(ID)+1 列,第一列是唯一的KD 值和len(D) 列,这样column ID = 1 如果df.loc[(df.ID==id) & (df.KD==kd),'DT'] >= 5column ID = 0 如果(kd,id) 对不在dfcolumn ID = -1如果df.loc[(df.ID==id) & (df.KD==kd),'DT'] < 5

对于上面给出的数据框,新的数据框应该是

df2

    KD     1     2    4     6     7     8    

0    2     1     0    -1    0     -1    0 
1    5     1     0     0    0      0    0  
2    7     0     0     1    1      1    0
3    9     0     0    -1    1      0    0
4   36     0     0     0    0     -1    0 

实际上,唯一的KDID 的数量非常大(在10K 范围内)。任何有助于找到一种非常有效的方法来做到这一点。请问?

【问题讨论】:

  • 您的第 3 行第 4 列是否正确? KD=9,ID=4,DT值为1.9小于5,不应该是-1吗?
  • @ScottBoston 出现在 :-)。已更正。

标签: python-3.x pandas dataframe


【解决方案1】:

让我们使用pivotmask 试试这个:

ID = [1,2,4,6,7,8]
df_p = df.pivot('KD', 'ID', 'DT')
df_p.mask((df_p >= 5), 1).mask(df_p < 5, -1).reindex(ID, axis=1)\
    .fillna(0).reset_index()

输出:

ID  KD    1    2    4    6    7    8
0    2  1.0  0.0 -1.0  0.0 -1.0  0.0
1    5  1.0  0.0  0.0  0.0  0.0  0.0
2    7  0.0  0.0  1.0  1.0  1.0  0.0
3    9  0.0  0.0 -1.0  1.0  0.0  0.0
4   36  0.0  0.0  0.0  0.0 -1.0  0.0

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 2018-05-28
    • 2015-04-06
    • 2022-11-11
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多