在python中向左行值,直到不为空
发布时间:2020-12-20 12:14:46 所属栏目:Python 来源:网络整理
导读:我必须处理大量数据.每行以1或0开头.我需要一个数据帧,其中每行以1开头,因此我必须向左移动所有行值,直到第一个值为1. 例如: 0 1 0 0 1 0 01 0 0 0 0 1 10 0 0 1 0 0 10 0 0 0 0 1 1 结果必须是这样的: 1 0 0 1 0 0 01 0 0 0 0 1 11 0 0 1 0 0 01 1 0 0 0
我必须处理大量数据.每行以1或0开头.我需要一个数据帧,其中每行以1开头,因此我必须向左移动所有行值,直到第一个值为1.
例如: 0 1 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 结果必须是这样的: 1 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 0 1 0 0 0 1 1 0 0 0 0 0 我不想使用for,while等,因为我需要一些使用pandas或numpy的更快的方法. 你有这个问题的想法吗? 解决方法
您可以使用cummax来掩盖所有需要移位的位置作为NaN并进行排序
df[df.cummax(1).ne(0)].apply(lambda x : sorted(x,key=pd.isnull),1).fillna(0).astype(int) Out[310]: 1 2 3 4 5 6 7 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 1 2 1 0 0 1 0 0 0 3 1 1 0 0 0 0 0 或者我们使用Divakar编写的函数justify(比应用排序快得多) pd.DataFrame(justify(df[df.cummax(1).ne(0)].values,invalid_val=np.nan,axis=1,side='left')).fillna(0).astype(int) Out[314]: 0 1 2 3 4 5 6 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 1 2 1 0 0 1 0 0 0 3 1 1 0 0 0 0 0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |