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
- 把它粘到架子上
- 和和行
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)