python中的数据框操作

时间:2018-02-02 01:33:41

标签: python pandas numpy dataframe logic

我在下面给出了输入数据框架。对于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的新手,并试图为我的进一步研究解决这个问题。谢谢!

1 个答案:

答案 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