是否有附加行到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
感谢您的宝贵时间。