我有一个类似于下面的数据框架
data=pd.DataFrame([['Juan',0,0,400,450,500],['Luis',100,100,100,100,100],[ 'Maria',0,20,50,300,500],[ 'Laura',0,0,0,100,900],['Lina',0,0,0,0,10]])
data.columns=['Name','Date1','Date2','Date3','Date4','Date5']
Name Date1 Date2 Date3 Date4 Date5
0 Juan 0 0 400 450 500
1 Luis 100 100 100 100 100
2 Maria 0 20 50 300 500
3 Laura 0 0 0 100 900
4 Lina 0 0 0 0 10
我想生成两个独立的数据帧。第一个应在前一个数据帧的非零值的所有位置包括1,即
Name Date1 Date2 Date3 Date4 Date5
0 Juan 0 0 1 1 1
1 Luis 1 1 1 1 1
2 Maria 0 1 1 1 1
3 Laura 0 0 0 1 1
4 Lina 0 0 0 0 1
第二行的第一个非零值中应该有1
Name Date1 Date2 Date3 Date4 Date5
0 Juan 0 0 1 0 0
1 Luis 1 0 0 0 0
2 Maria 0 1 0 0 0
3 Laura 0 0 0 1 0
4 Lina 0 0 0 0 1
我查看了其他帖子,发现我可以通过以下内容获得第一个帖子
out=data.copy()
out.iloc[:,1:6]=data.select_dtypes(include=['number']).where(data.select_dtypes(include=['number'])==0,1)
有没有更简单的方法来实现我想要的第一个结果?及
有人知道如何实现第二个结果吗?(当然,还有一个双循环,一个数字一个数字地比较,这是我宁愿避免的暴力方法)
对于第一种情况,您可以只选择数值列,并在^{} 中用} 比较第一个} 转换为整数的布尔掩码,添加每
1
替换非0
值,然后对于第二种情况,使用^{1
值和^{axis=1
的累积和:相关问题 更多 >
编程相关推荐