熊猫DataFrame:如果满足多个条件,则将整数分配给新列

我试图在熊猫数据框中创建一个新列,然后根据条件格式分配一个整数值。一个例子是:熊猫DataFrame:如果满足多个条件,则将整数分配给新列

如果((A> 1)&(一个< 5))得到值10,如果((A> = 5)&(一个< 10))得到的值24,如果((一> 10)&(a < 5))给出值57

其中'a'是数据框中的另一列。

有没有办法做到这一点与熊猫/ numpy没有创建一个函数?我尝试了几种不同的选择,但都没有成功

回答:

使用pd.cut

df = pd.DataFrame({'a': [ 

2, 3, 5,7,8,10,100]})

pd.cut(df.a,bins=[1,5,10,np.inf],labels=[10,24,57])

Out[282]:

0 10

1 10

2 10

3 24

4 24

5 24

6 57

Name: a, dtype: category

Categories (3, int64): [10 < 24 < 57]

回答:

我想这样做,而无需创建功能将是非常迂回的任何方式,但它实际上不是太糟糕了功能。此外,你的条件并不真正相互关联,但我认为这是一个错字。如果你的条件比较简单,可以快速定义你的功能,让您的代码紧凑:

df['new column'] = df['a'].apply(lambda x: 10 if x < 5 else 24 if x < 10 else 57) 

,可以得到一点毛茸茸的,如果你的条件,更complicatied - 这是更容易,如果你定义的功能来管理更明确:

def f(x): 

if x > 1 and x < 5: return 10

elif x >= 5 and x < 10: return 14

else: return 57

df['new column'] = df['a'].apply(f)

如果你真的想避免的功能,我能想到的是创建一个新的列表为新柱,通过你的数据迭代,然后将它添加到您的数据框填充它的最好的:

newcol = [] 

for a in df['a'].values:

if x > 1 and x < 5: newcol.append(10)

elif x >= 5 and x < 10: newcol.append(24)

else: newcol.append(57)

df['newcol'] = newcol

以上是 熊猫DataFrame:如果满足多个条件,则将整数分配给新列 的全部内容, 来源链接: utcz.com/qa/257628.html

回到顶部