python - 如何创建相应的列

标签 python pandas

我得到的数据是这样的:

import pandas as pd

data_dict  = {'a':[5,2,4,5,3,3,1,2,3],
             'name':['Jack','jon',"tom",'lazzy','mack','zack','makilo','drag','maiko']}
data_01 = pd.DataFrame(data_dict)
input:
    a   name
0   5   Jack
1   2   jon
2   4   tom
3   5   lazzy
4   3   mack
5   3   zack
6   1   makilo
7   2   drag
8   3   maiko

我希望输出应该有 3 列 'good','mid','poor'哪个>3,==3,<3 预期输出应该是:

a name good mid poor
5 Jack 1    0   0
2 jon  0    0   1
4 tom  1    0   0 
5 lazzy 1   0   0
3 mack 0    1   0 
....

感谢您的帮助!

最佳答案

  • 我要使用 np.signdata_01.a - 3
    • 返回 -1什么时候< 3 , 0什么时候== 3 , 和 1什么时候> 3
  • 然后我将它们用作标签数组的索引

    labels = np.array(['mid', 'good', 'poor'])
    
  • 当我切片时,0映射到 'mid' , 1映射到 'good'-1映射到 'poor'

  • 最后,我使用 pd.get_dummies创建虚拟列。

labels = np.array(['mid', 'good', 'poor'])

data_01.join(pd.get_dummies(labels[np.sign(data_01.a - 3)]))

   a    name  good  mid  poor
0  5    Jack     1    0     0
1  2     jon     0    0     1
2  4     tom     1    0     0
3  5   lazzy     1    0     0
4  3    mack     0    1     0
5  3    zack     0    1     0
6  1  makilo     0    0     1
7  2    drag     0    0     1
8  3   maiko     0    1     0

备选方案 1
这使用 np.eye生成虚拟列。我创建字典将假人绑定(bind)到标签并将字典传递给 pd.DataFrame.assign

dum = dict(zip(
    ['mid', 'good', 'poor'],
    np.eye(3, dtype=int)[:, np.sign(data_01.a - 3)]
))

data_01.assign(**dum)

   a    name  good  mid  poor
0  5    Jack     1    0     0
1  2     jon     0    0     1
2  4     tom     1    0     0
3  5   lazzy     1    0     0
4  3    mack     0    1     0
5  3    zack     0    1     0
6  1  makilo     0    0     1
7  2    drag     0    0     1
8  3   maiko     0    1     0

备选方案 2
我用 np.eye再次,但这次,我从头开始创建一个数据框并使用 pd.DataFrame.join将其附加到 data_01

dum = pd.DataFrame(
    np.eye(3, dtype=int)[np.sign(data_01.a - 3)],
    data_01.index, ['mid', 'good', 'poor']
)

data_01.join(dum)

   a    name  mid  good  poor
0  5    Jack    0     1     0
1  2     jon    0     0     1
2  4     tom    0     1     0
3  5   lazzy    0     1     0
4  3    mack    1     0     0
5  3    zack    1     0     0
6  1  makilo    0     0     1
7  2    drag    0     0     1
8  3   maiko    1     0     0

关于python - 如何创建相应的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46946681/

相关文章:

python - 支持向量回归 : TypeError: must be real number, 不是 str

python - 使用 BaseHTTPRequestHandler 编写响应正文

python - 如何使用 Pandas DataFrame 对数据库表的现有行执行更新?

Python:使用日期时间索引在 Pandas 中建立索引

python - <type 'exceptions.ImportError' > 当导入 pandas 和 sklearn 时

python - 高效使用 numpy_indexed 输出

python - 如何按值重新排列双字典(Python3)

python - 在所有 Pandas DataFrame 列中搜索字符串并过滤

python - 为什么 int 转换比 pandas 中的 float 慢得多?

python - 如何使用 Python 对时间段内的行进行分组