我在下面给出了输入数据框架。对于ID
的每个第一个唯一元素行,必须在输出数据框Zeros_For_UniqueID
列中将其写为零。之后,对于唯一Count
,整数出现之前,应从ID
变量计算连续的零,并且必须将其放在输出列Zeros_For_UniqueID
中。
输入数据框:
ID Count
1234 1
1234 2
1234 0
1234 0
1234 0
1234 1
1234 1
5678 1
5678 5
5678 4
5678 0
1111 0
1111 0
1111 1
1111 2
1111 0
1111 0
1111 2
输出DataFrame
ID Count Zeros_For_UniqueID
1234 1 0
1234 2 0
1234 0 0
1234 0 1
1234 0 2
1234 1 3
1234 1 0
5678 1 0
5678 5 0
5678 4 0
5678 0 0
1111 0 0
1111 0 1
1111 1 2
1111 2 0
1111 0 0
1111 0 1
1111 2 2
任何人都可以帮我解决这个问题。我是python的新手,并试图为我的进一步研究解决这个问题。谢谢!
答案 0 :(得分:1)
我不确定速度,但这将达到您的需求,您需要groupby
+ cumsum
+ shift
df['New']=df.groupby('ID').\
apply(lambda x : x.groupby(x.Count.ne(0).cumsum().shift().fillna(False)).cumcount()).\
sort_index(level=1).values
df
Out[323]:
ID Count New
0 1234 1 0
1 1234 2 0
2 1234 0 0
3 1234 0 1
4 1234 0 2
5 1234 1 3
6 1234 1 0
7 5678 1 0
8 5678 5 0
9 5678 4 0
10 5678 0 0
11 1111 0 0
12 1111 0 1
13 1111 1 2
14 1111 2 0
15 1111 0 0
16 1111 0 1
17 1111 2 2