pandas 如何新建列并按列组赋值

nbewdwxp  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(144)

我有数据框,

df
uid    
 1     
 2      
 3
 ...

我想分配一个新列,其值为0或1,具体取决于我将要分配的uid。

df
uid  new 
1     0
2     0
3     1
..
5n0oy7gb

5n0oy7gb1#

你必须解释其中的逻辑。
也就是说,有很多可能的方法。
考虑map的显式Map:

mapper = {1: 0, 2: 0, 3: 1}

df['new'] = df['uid'].map(mapper)

# or
mapper = {0: [1, 2], 1: [3]}

df['new'] = df['uid'].map({k:v for v,l in mapper.items() for k in l})

或者使用1的目标列表,并转换为int

target = [3]

df['new'] = df['uid'].isin(target).astype(int)

输出:

uid  new
0    1    0
1    2    0
2    3    1
r6vfmomb

r6vfmomb2#

如果uidnew之间存在相关性,则可以创建函数来定义uidnew之间的Map

def mapping(value):
    new_value = value // 2
    return new_value

然后

df["new"] = df["uid"].apply(mapping)

或者直接

df["new"] = df["uid"].apply(lambda value: value // 2)
ndh0cuux

ndh0cuux3#

根据3 uid's的关系,我得出了一个关系,可被3整除的uid被分配给10。(不确定该关系是否正确,因为您只给出了uid的3个值)
可以应用np.where()-〉np.where(condition, x, y)如果condition满足,则分配值x,否则分配值y

import pandas as pd
import numpy as np
 
df = pd.DataFrame({'uid': [1, 2, 3]})
df["new"] = np.where(df["uid"] % 3 == 0, 1, 0)
print(df)

输出:

uid  new
0    1    0
1    2    0
2    3    1

相关问题