2017-12-02 75 views
0

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

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

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

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

+0

发布您的数据框的例子会有所帮助。可能很难理解这个。数据框中的'a'是另一列吗?或一些随机变量? – Abhishek

回答

0

使用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] 
+0

@丹是帮助,你能考虑接受吗? – Wen

+0

当然,应该做到了 – Dan

-1

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

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