我试图在pandas数据帧中创建一个新列,然后根据条件格式分配一个整数值。一个例子是:
if((a> 1)&amp;(a <5))给出值10,if((a> = 5)&amp;(a <10))给出值24,if((a) &gt; 10)&amp;(a <5))给出值57
其中&#39; a&#39;是数据框中的另一列。
有没有办法在没有创建函数的情况下使用pandas / numpy?我尝试了几个不同的选项但没有效果。
答案 0 :(得分: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]
答案 1 :(得分:-1)
我认为在没有创建函数的情况下执行此操作的任何方式都会非常迂回,尽管它对函数来说实际上并不是太糟糕。另外,你的条件并没有真正相互融合,但我认为这是一个错字。如果条件相对简单,您可以动态定义函数以保持代码紧凑:
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)
如果您真的想避免使用功能,我能想到的最好的方法是为新列创建一个新列表,通过迭代数据填充它,然后将其添加到您的数据帧中:
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