PANDAS DATAFRAME:如果满足多个条件,则将整数分配给新列



我正在尝试在pandas dataframe中创建一个新列,然后根据条件格式分配整数值。一个例子是:

if((A> 1)&(a< 5))给出值10,if(((a> = 5)&(a< 10))给出值24)&(a< 5))给出值57

其中'a'是dataframe中的另一列。

有什么办法可以在没有创建函数的情况下使用Pandas/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)

如果您的条件更加复杂,可能会有些毛茸茸 - 如果您更明确地定义功能,则更容易管理:

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)

如果您真的想避免函数,我能想到的最好的是为您的新列创建一个新列表,通过遍历数据来填充它,然后将其添加到您的dataframe:

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

最新更新