根据条件为Pandas系列赋值?

问题描述:

df根据条件为Pandas系列赋值?

A B 
1 2 
3 4 

然后我想创建一个数据帧新连续剧

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满足和1 2的值,否则

如果我只是尝试

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。如果添加一个它强制布尔值为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 
+0

谢谢,那工作 – user5739619

,当你调用[R [COND]你像处理一系列的整数。当你指定1到r为

r = 1 

[R现在引用整数1左右。

您想首先为cond的大小创建一系列的。喜欢的东西

r = pd.Series(np.ones(cond.shape)) 
+0

如果我尝试'R = pd.Series(np.ones(df.shape))',我得到'例外:数据必须是一维 ' – user5739619

+0

我想我用工作' len(df.index)'而不是'shape'。但是,'r [cond] = 2'不起作用。这是为什么? – user5739619

+0

你可以试试它作为'r = np.ones(cond.shape)'而不是'pd.Series(np.ones(df.shape))'吗? –