追加行并更新值Pandas



是否有附加行到df2的代码,当附加时,更改该行的值?

我想追加(或真正削减)行/s,满足一些不同的标准,从df_Clean到df_VOIDS,然后更新'Drop_Reason' col到一个新的值;

df_Clean =

Encoder Index   Void    Phase Max   Force Max   Force Avg   THD Max 
125545   NaN             0          54          19         6
125583   NaN            12          79          54        16

df_VOIDS =

Encoder_Index   Void    Phase_Max   Force_Max   Force_Avg   THD_Max Drop_Reason
125544   Void            5           59          39        14    Voided
125657   Void            5           80          44        23    Voided
125901   Void            6           80          43        19    Voided
125963   Void            6           78          54        14    Voided

If Phase Max>10,然后理想情况下,df_Clean的最后一行将被删除并添加到df_VOIDS与"以上相位max"添加到'Drop_Reason'.

我正在做几个标准检查,如Force Max, Force Avg等,以防答案改变。

首先,您不应该再使用append,因为它已被弃用。相反,使用concat。您可以对代码进行一些优化,并且可以通过向传输的行添加所需的值来解决替换Drop_Reason列中的所有NaN值的问题:

Phase_Max_Value = 10
xfer = df_Clean.Phase_Max > Phase_Max_Value
df_VOIDS = pd.concat([df_VOIDS, df_Clean[xfer].assign(Drop_Reason='GrtrT Phase_Max')])
df_Clean = df_Clean[~xfer]

合成dataframes:

# df_VOIDS
Encoder_Index  Void  Phase_Max  Force_Max  Force_Avg  THD_Max      Drop_Reason
0         125544  Void          5         59         39       14           Voided
1         125657  Void          5         80         44       23           Voided
2         125901  Void          6         80         43       19           Voided
3         125963  Void          6         78         54       14           Voided
1         125583   NaN         12         79         54       16  GrtrT Phase_Max
# df_Clean
Encoder_Index  Void  Phase_Max  Force_Max  Force_Avg  THD_Max
0         125545   NaN          0         54         19        6

我张贴我目前的答案,但绝对欢迎其他建议。

下面是几个标准中的一个:

Phase_Max_Value = 10
df_VOIDS = df_VOIDS.append(df_Clean[df_Clean.Phase_Max > Phase_Max_Value])
#if Drop_Reason equals NaN than Drop reason = 'Phase Max'
df_VOIDS.loc[df_VOIDS['Drop_Reason'].isna(),'Drop_Reason']='GrtrT Phase_Max'
df_Clean = df_Clean[df_Clean.Phase_Max <= Phase_Max]

一旦出现Appended行,它将用NaN填充Drop_Reason。然后我用一个理由替换列中的所有NaN,但是盲目地覆盖NaN感觉有点危险。这给了:

df_Clean =

Encoder Index   Void    Phase Max   Force Max   Force Avg   THD Max 
125545   NaN             0          54          19         6

df_VOIDS =

Encoder_Index   Void    Phase_Max   Force_Max   Force_Avg   THD_Max Drop_Reason
125544          Void            5          59          39        14      Voided
125657          Void            5          80          44        23      Voided
125901          Void            6          80          43        19      Voided
125963          Void            6          78          54        14      Voided
125583           NaN            12         79          54        16  GrtrT Phase_Max

感谢您的宝贵时间。

最新更新