如果该列 (Col_6) 为空,我有一个函数可以将一列 (Col_5) 的值移至另一列 (Col_6),如下所示:
def shift(row):
return row['Col_6'] if not pd.isnull(row['Col_6']) else row['Col_5']
然后我将此函数应用到我的列,如下所示:
df[['Col_6', 'Col_5']].apply(shift, axis=1)
这工作正常,但我不需要将原始值保留在 Col_5 中,而是需要将其转移到 Col_6 并在其位置上保留 np.nan
(这样我就可以将相同的函数应用于前面的专栏。)有什么想法吗?
最佳答案
fillna
+ mask
:向量化,而不是逐行
对于 Pandas,您应该尝试通过 apply
来避免按行操作,因为这些操作是通过 Python 级循环进行处理的。在这种情况下,您可以使用:
null_mask = df['Col_6'].isnull()
df['Col_6'] = df['Col_6'].fillna(df['Col_5'])
df['Col_5'] = df['Col_5'].mask(null_mask)
请注意,我们首先计算并存储一个表示 Col_6
为 null 的 bool 序列,然后使用它来使这些值在通过 移动的情况下为 null >fillna
.
关于python - 如何在转移后留下 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53346198/