识别Pandas DataFrame每行中的第一个和所有非零值

胡安·奥萨(Juan Ossa):

我有一个类似于以下的Pandas DataFrame

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

我想生成两个单独的数据帧。第一个应该在先前DataFrame的非零值的所有位置都包括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)

有什么更简单的方法可以达到我想要的第一个结果?

有谁知道如何获得第二个结果?(当然,还有一个双循环,按数字比较数字,这是我宁愿避免的强力方法)

耶斯雷尔:

首先,您只能选择数字列,并用in 替换非0,然后第二个,将累加总和与比较第一个和布尔掩码转换为整数1DataFrame.maskaxis=11DataFrame.eqDataFrame.astype

df1, df2 = data.copy(), data.copy()
cols = df1.select_dtypes(include=np.number).columns
df1[cols] = df1[cols].mask(data[cols].ne(0), 1)

df2[cols] = df1[cols].cumsum(axis=1).eq(1).astype(int)
print(df1)
    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

print(df2)
    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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在pandas DataFrame的每一列中查找第一个非零值

使用Pandas获取该行中第一个非零值的列名

识别熊猫组中的第一个非零元素

在Pandas DataFrame中找到第一个和最后一个非NaN值

Pandas 数据框列从第一个非零值向前填充

Pandas 数据帧将第一个非 nan 值之后的所有值分配给 0

pandas:shift(1)组中的所有值,但第一个值(每组中的第一个除外)应为0

如何使用pandas减去数据集中所有列的分组数据中的第一个和最后一个值

在Pandas的各列中查找第一个非零条目

Python Pandas-在多列中第一个非零值之前将NaN全零的正确方法是什么?

识别由熊猫中的多个列组成的组中的第一个非零元素

标记所有重复项 - Pandas Dataframe - 即使是输出中没有“NaN”的第一个实例

根据条件识别具有行中第一个值的列

如何获取 Pandas 中 DataFrame 的第一个和最后一个值的百分比变化

在Pandas DataFrame中获取每行非零值的计数

R:识别重复组中的第一个和最后一个元素

pandas - 从数据框中的列中获取第一个和最后一个值

从python中的pandas数据框中删除只有一个非零值的行

在 Pandas DataFrame 的行中找到第一个零

将 Pandas Dataframe 中的行分组,列值在组中第一个值的 20% 以内

获取Pandas DataFrame子集的第一个和最后一个索引

将pandas数据框切片到包含值的所有列的第一个实例

Pandas 'color=[]' 只显示图表中所有条形的第一个颜色值

Pandas:用第一个非空值为用户填写列的值

如何按每行的第一个单词将 pandas 中的行汇总为该第一个单词的聚合?

如何识别向量中第一个出现的局部最小值的位置?

识别组中重复值的第一个实例

Python pandas:如何从特定列中选择第一个非“无”值?

Python Pandas:在所有单元格中选择数组中的第一个元素