Python 基于少数条件的费率

Python 基于少数条件的费率,python,pandas,Python,Pandas,我想根据几列中的条件添加费率 如果A>30+1和B>50+1和C>80+1,D不重要, 例如,我有一个矩阵(数据帧): 我尝试的是: [1]中的:将numpy作为np导入 在[2]中:导入熊猫作为pd 在[36]中:df=pd.DataFrame( np.random.randint(0100,size=(5,4)), 列=列表('ABCD') ) In[36]:df 出[36]: A、B、C、D 0 21 32 84 43 1 79 29 42 63 2 31 38 6

我想根据几列中的条件添加费率 如果
A>30
+1和
B>50
+1和
C>80
+1,D不重要, 例如,我有一个矩阵(数据帧):

我尝试的是:

[1]中的
:将numpy作为np导入
在[2]中:导入熊猫作为pd
在[36]中:df=pd.DataFrame(
np.random.randint(0100,size=(5,4)),
列=列表('ABCD')
)
In[36]:df
出[36]:
A、B、C、D
0  21  32  84  43
1  79  29  42  63
2  31  38   6  52
3  92  54  79  75
4   9  14  87  8
  • 创建系列(
    df['A']>30
  • 把它粘到架子上
  • 和和行
[37]中的
df['R']=pd.concat(
[(df['A']>30),(df['B']>50),(df['C']>80)],轴=1
).sum(轴=1)
In[38]:df
出[38]:
A B C D R
0  21  32  84  43  1
1  79  29  42  63  1
2  31  38   6  52  1
3  92  54  79  75  2
4   9  14  87  85  1

结果和我预期的一样,但也许有更简单的方法?

你也可以试试这个。不知道是否更好

>>> df
    A   B   C   D
0   8  47  95  52
1  90  84  39  80
2  15  52  37  79
3  99  24  76   5
4  93   4  97   0



你也可以试试这个。不知道是否更好

>>> df
    A   B   C   D
0   8  47  95  52
1  90  84  39  80
2  15  52  37  79
3  99  24  76   5
4  93   4  97   0


怎么样

df["R"] = (
    (df["A"] > 30).astype(int) +
    (df["B"] > 50).astype(int) +
    (df["C"] > 80).astype(int)
)
怎么样

df["R"] = (
    (df["A"] > 30).astype(int) +
    (df["B"] > 50).astype(int) +
    (df["C"] > 80).astype(int)
)
您可以这样做:

df['R'] = (df.iloc[:,:3]>[30, 50, 80]).sum(axis=1)
使用列名的相同解决方案

df['R'] = (df[['A','B','C']]>[30, 50, 80]).sum(axis=1)
您可以这样做:

df['R'] = (df.iloc[:,:3]>[30, 50, 80]).sum(axis=1)
使用列名的相同解决方案

df['R'] = (df[['A','B','C']]>[30, 50, 80]).sum(axis=1)

很高兴提供帮助:)@Mercury提供了非常简短和良好的答案,因此很抱歉我将他标记为答案,您的解决方案仍然非常可读,谢谢!没关系,我同意他们的答案更好:)很乐意帮助:)@Mercury提供了非常简短而好的答案,所以很抱歉我将他标记为答案,您的解决方案仍然非常可读,谢谢!没关系,我同意他们的答案是更好的:)很好,你能提供答案列不是一个接一个的吗?你的意思是如果列不是相邻的或按顺序排列的?例如,如果您希望将条件应用于列D、A、C,则为:df['R']=(df.iloc[:,[3,0,2]>[30,50,80]).sum(axis=1)#如果您使用列名,则为:df['R']=(df['A','B','C']>[30,50,80])。sum(axis=1)非常好,您能否提供列不一一对应的答案?您是指列不相邻或按顺序排列吗?例如,如果希望将条件应用于列D、A、C,则为:df['R']=(df.iloc[:,[3,0,2]>[30,50,80]).sum(axis=1)#如果使用列名,则为:df['R']=(df[[A','B','C']>[30,50,80]).sum(axis=1)