修改Pandas Dataframe

mrfwxfqh  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(137)

尝试创建一个函数X(df):根据以下标准替换 Dataframe 的FIRST列的值:
1.如果该值是0到0.5之间的数字(即0〈= value〈= 0.5),则将该值替换为该行中所有列的值之和。
1.如果值在1.0和2.0之间(即1.0〈=值〈= 2.0),则将此值替换为-99。(如果在第1部分中,原始值为0.1,并且所有列(该行中)的总和为1.5,则在第2部分中,此值将替换为-99。)

original df:
|idx|   |A|      |B|             
|0|     |0.4|   1.0
|1|     |0.0|    0.5
|2|     |10.0|   0.0
|3|     |1.5|    -100.0
|4|     |0.1|    0.1
|5|     |0.5|    -10.0

I have this so far:

def X(df):
   for i in df.iloc[:, 0]:
       if (i >= 0) and (i <= 0.5):
           df.iloc[:,0] = df.sum(axis=1)
       elif (i>=1) and (i<=2):
           df.iloc[:,0] = int(-99)
       else:
           continue

   return df

'''
I got: 

     A      B
idx              
0      3.4    1.0
1      1.5    0.5
2     10.0    0.0
3   -298.5 -100.0
4      0.4    0.1
5    -29.5  -10.0

I was expecting:
 A      B
idx             
0     0.5    1.0
1     0.5    0.5
2    10.0    0.0
3     -99 -100.0
4     0.2    0.1
5     -9.5  -10.0
vbkedwbf

vbkedwbf1#

示例

data = {'A': {0: 0.4, 1: 0.0, 2: 10.0, 3: 1.5, 4: 0.1, 5: 0.5},
        'B': {0: 1.0, 1: 0.5, 2: 0.0, 3: -100.0, 4: 0.1, 5: -10.0}}
df = pd.DataFrame(data)

输出(df):

A    B
0   0.4  1.0
1   0.0  0.5
2   10.0 0.0
3   1.5  -100.0
4   0.1  0.1
5   0.5 -10.0

代码

使用np.select

import numpy as np
cond1 = (df['A'] >= 0) & (df['A'] <= 0.5)
cond2 = (df['A'] >= 1) & (df['A'] <= 2)
np.select([cond1, cond2], [df.sum(axis=1), -99], df['A'])

实验结果:

array([  1.4,   0.5,  10. , -99. ,   0.2,  -9.5])

最终版

将结果写入A列

df.assign(A=np.select([cond1, cond2], [df.sum(axis=1), -99], df['A']))

所需输出:

A     B
0   1.4   1.0
1   0.5   0.5
2   10.0  0.0
3   -99.0 -100.0
4   0.2   0.1
5   -9.5  -10.0

相关问题