[英]Assign values in Pandas series based on condition?
我有一个数据帧df
像
A B
1 2
3 4
然后,我想创建2个新系列
t = pd.Series()
r = pd.Series()
我可以使用条件cond
将值分配给t
t = "1+" + df.A.astype(str) + '+' + df.B.astype(str)
cond = df['A']<df['B']
team[cond] = "1+" + df.loc[cond,'B'].astype(str) + '+' + df.loc[cond,'A'].astype(str)
但是我对r
有问题。 我只希望r
满足con
时包含2的值,否则为1
如果我只是尝试
r = 1
r[cond] = 2
然后我得到TypeError: 'int' object does not support item assignment
我想我可以在df
运行一个for循环,并在df
每一行中检查cond
的情况,但是我想知道Pandas是否提供了一种更有效的方法呢?
您会笑这很容易:
r = cond + 1
原因是cond
是一个布尔值(True和False),其值为1和0。如果将其加1,它将布尔值强制为int,这意味着将True映射为2,将False映射为1。
df = pd.DataFrame({'A': [1, 3, 4],
'B': [2, 4, 3]})
cond = df['A'] < df['B']
>>> cond + 1
0 2
1 2
2 1
dtype: int64
当您为r分配1时
r = 1
r现在引用整数1。因此,当您调用r [cond]时,您将整数视为一个系列。
您首先要为cond的大小创建一系列。 就像是
r = pd.Series(np.ones(cond.shape))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.