根据Pandas中的条件重新排列 Dataframe 中的值

mctunoxg  于 2022-11-20  发布在  其他
关注(0)|答案(3)|浏览(158)

我有一个数据集,其中,当Q1 24 - Q4 24之和介于数字1 - 2.5之间时,我希望将该行中的数字2放在Q4 24下。

数据

ID  type    Q1 24   Q2 24   Q3 24   Q4 24
AA  hi      2.0     1.2     0.5     0.6
AA  hello   0.7     2.0     0.6     0.6
AA  bye     0.6     0.6     0.6     0.4
AA  ok      0.3     0.4     0.2     0.2

所需

ID  type    Q1 24   Q2 24   Q3 24   Q4 24
AA  hi      2.0     1.2     0.5     0.6
AA  hello   0.7     2.0     0.6     0.6
AA  bye     0.0     0.0     0.0     2.0
AA  ok      0.0     0.0     0.0     2.0

"正在做"

df.loc[df.iloc[:,2:].sum(axis=1)>1<2.5, ['Q1 24','Q2 24','Q3 24','Q4 24']]= 2

一个SO成员帮助完成了上面的脚本,但是我怎么能只针对Q4 24下的那一行呢?我想我可以再次使用iloc来完成这个任务。任何建议都是非常感谢的。

z31licg0

z31licg01#

这将执行您在将其他列归零后执行的操作:

df.loc[df.filter(regex=r'^Q\d').sum(axis=1).between(1, 2.5), ['Q1 24','Q2 24','Q3 24','Q4 24']] = 0, 0, 0, 2

   ID   type  Q1 24  Q2 24  Q3 24  Q4 24
0  AA     hi    2.0    1.2    0.5    0.6
1  AA  hello    0.7    2.0    0.6    0.6
2  AA    bye      0      0      0    2.0
3  AA     ok      0      0      0    2.0
vx6bjr1n

vx6bjr1n2#

作为替代方案:

import numpy as np
df['Q4 24']=np.where((df[df.columns[2:]].sum(axis=1)<=2.5) & (df[df.columns[2:]].sum(axis=1)>=1),2,df['Q4 24'])
print(df)
'''
   ID   type  Q1 24  Q2 24  Q3 24  Q4 24
0  AA     hi    2.0    1.2    0.5    0.6
1  AA  hello    0.7    2.0    0.6    0.6
2  AA    bye    0.6    0.6    0.6    2.0
3  AA     ok    0.3    0.4    0.2    2.0
'''
2wnc66cl

2wnc66cl3#

你在布尔索引的道路上是正确的。
我会用途:

df.loc[df.filter(regex=r'^Q\d').sum(axis=1).between(1, 2.5), 'Q4 24'] = 2

输出量:

ID   type  Q1 24  Q2 24  Q3 24  Q4 24
0  AA     hi    2.0    1.2    0.5    0.6
1  AA  hello    0.7    2.0    0.6    0.6
2  AA    bye    0.6    0.6    0.6    2.0
3  AA     ok    0.3    0.4    0.2    2.0
将2添加到最后一列并将所有其他列设置为0
sel = df.filter(regex=r'^Q\d')

df.loc[sel.sum(axis=1).between(1, 2.5), sel.columns] = [0]*(sel.shape[1]-1)+[2]

输出量:

ID   type  Q1 24  Q2 24  Q3 24  Q4 24
0  AA     hi    2.0    1.2    0.5    0.6
1  AA  hello    0.7    2.0    0.6    0.6
2  AA    bye    0.0    0.0    0.0    2.0
3  AA     ok    0.0    0.0    0.0    2.0

相关问题