我有数据框,
df uid 1 2 3 ...
我想分配一个新列,其值为0或1,具体取决于我将要分配的uid。
df uid new 1 0 2 0 3 1 ..
5n0oy7gb1#
你必须解释其中的逻辑。也就是说,有很多可能的方法。考虑map的显式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
1
target = [3] df['new'] = df['uid'].isin(target).astype(int)
输出:
uid new 0 1 0 1 2 0 2 3 1
r6vfmomb2#
如果uid和new之间存在相关性,则可以创建函数来定义uid和new之间的Map
uid
new
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)
ndh0cuux3#
根据3 uid's的关系,我得出了一个关系,可被3整除的uid被分配给1或0。(不确定该关系是否正确,因为您只给出了uid的3个值)可以应用np.where()-〉np.where(condition, x, y)如果condition满足,则分配值x,否则分配值y
3 uid's
0
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)
3条答案
按热度按时间5n0oy7gb1#
你必须解释其中的逻辑。
也就是说,有很多可能的方法。
考虑
map
的显式Map:或者使用
1
的目标列表,并转换为int输出:
r6vfmomb2#
如果
uid
和new
之间存在相关性,则可以创建函数来定义uid
和new
之间的Map然后
或者直接
ndh0cuux3#
根据
3 uid's
的关系,我得出了一个关系,可被3整除的uid
被分配给1
或0
。(不确定该关系是否正确,因为您只给出了uid
的3个值)可以应用
np.where()
-〉np.where(condition, x, y)
如果condition
满足,则分配值x
,否则分配值y
输出: