Python 计算数据帧中最后一个值与行末尾之间的单元格数
我正在使用Python中的pandas库 我有一个数据框:Python 计算数据帧中最后一个值与行末尾之间的单元格数,python,pandas,dataframe,Python,Pandas,Dataframe,我正在使用Python中的pandas库 我有一个数据框: 0 1 2 3 4 0 0 0 0 1 0 1 0 0 0 0 1 2 0 0 1 0 0 3 1 0 0 0 0 4 0 0 1 0 0 5 0 1 0 0 0 6 1 0 0 1 1 是否可以创建一个新列,该列是行末尾和最后一个大于零的值之间的空单元格数的
0 1 2 3 4
0 0 0 0 1 0
1 0 0 0 0 1
2 0 0 1 0 0
3 1 0 0 0 0
4 0 0 1 0 0
5 0 1 0 0 0
6 1 0 0 1 1
是否可以创建一个新列,该列是行末尾和最后一个大于零的值之间的空单元格数的计数?下面的数据框示例:
0 1 2 3 4 Value
0 0 0 0 1 0 1
1 0 0 0 0 1 0
2 0 0 1 0 0 2
3 1 0 0 0 0 4
4 0 0 1 0 0 2
5 0 1 0 0 0 3
6 1 0 0 1 1 0
使用:
详细信息:
列和切片的第一个更改顺序:
print (df.iloc[:, ::-1])
4 3 2 1 0
0 0 1 0 0 0
1 1 0 0 0 0
2 0 0 1 0 0
3 0 0 0 0 1
4 0 0 1 0 0
5 0 0 0 1 0
6 1 1 0 0 1
然后通过以下方式使用每行的累积总和:
仅通过以下方式比较1
值:
最后按sum
对每行进行计数:
print (df.iloc[:, ::-1].cumsum(axis=1).eq(0).sum(axis=1))
0 1
1 0
2 2
3 4
4 2
5 3
6 0
dtype: int64
使用:
详细信息:
列和切片的第一个更改顺序:
print (df.iloc[:, ::-1])
4 3 2 1 0
0 0 1 0 0 0
1 1 0 0 0 0
2 0 0 1 0 0
3 0 0 0 0 1
4 0 0 1 0 0
5 0 0 0 1 0
6 1 1 0 0 1
然后通过以下方式使用每行的累积总和:
仅通过以下方式比较1
值:
最后按sum
对每行进行计数:
print (df.iloc[:, ::-1].cumsum(axis=1).eq(0).sum(axis=1))
0 1
1 0
2 2
3 4
4 2
5 3
6 0
dtype: int64
使用
argmax
df['value'] = df.apply(lambda x: (x.iloc[::-1] == 1).argmax(),1)
##OR
使用np.where
df['Value'] = np.where(df.iloc[:,::-1] == 1,True,False).argmax(1)
使用
argmax
df['value'] = df.apply(lambda x: (x.iloc[::-1] == 1).argmax(),1)
##OR
使用np.where
df['Value'] = np.where(df.iloc[:,::-1] == 1,True,False).argmax(1)
OP没有提到那个案例…还有eg每行都有一个,所以我想他希望有1个。@jezraeli发现他们更快。.另一个条件?OP没有提到那个案例…还有eg每行都有一个,所以我想他希望有1个。@jezraeli发现他们更快。.另一个条件?如果只有
0
行?这是所有列的编号,这里是5
?感谢您的回复。0行永远不会出现。您的版本是什么?如果只有0
行,预期输出是什么?这是所有列的编号,这里是5
?感谢您的回复。0行永远不会出现。您的版本是什么?