繁体   English   中英

根据条件分配熊猫系列中的值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM