熊猫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