我有一个带有n个观测值的数据集,并说出2个变量X1和X2。我试图根据它们的(X1,X2)值的一组条件对每个观察进行分类。例如,数据集看起来像
df: Index X1 X2 1 0.2 0.8 2 0.6 0.2 3 0.2 0.1 4 0.9 0.3
并且组由...定义
我想生成以下数据帧。
expected result: Index X1 X2 Group 1 0.2 0.8 1 2 0.6 0.2 4 3 0.2 0.1 3 4 0.9 0.3 4
另外,对于这类问题,使用numpy数组会更好/更快吗?
在回答你的上一个问题时,我绝对认为pandas
是一个很好的工具;它可以在numpy
中完成,但是在使用数据帧时,pandas可以说更直观,而且对于大多数应用程序而言足够快。 pandas
和numpy
也很好地一起打球。例如,在您的情况下,您可以使用numpy.select
来构建pandas
列:
import numpy as np
import pandas as pd
# Lay out your conditions
conditions = [((df.X1 < 0.5) & (df.X2>=0.5)),
((df.X1>=0.5) & (df.X2>=0.5)),
((df.X1<0.5) & (df.X2<0.5)),
((df.X1>=0.5) & (df.X2<0.5))]
# Name the resulting groups (in the same order as the conditions)
choicelist = [1,2,3,4]
df['group']= np.select(conditions, choicelist, default=-1)
# Above, I've the default to -1, but change as you see fit
# if none of your conditions are met, then it that row would be classified as -1
>>> df
Index X1 X2 group
0 1 0.2 0.8 1
1 2 0.6 0.2 4
2 3 0.2 0.1 3
3 4 0.9 0.3 4
就像是
df[['X1','X2']].gt(0.5).astype(str).sum(1).map({'FalseTrue':1,'TrueFalse':4,'FalseFalse':3,'TrueTrue':2})
Out[56]:
0 1
1 4
2 3
3 4
dtype: int64