我有一个DataFrame,其中包含许多人的纵向数据。成功标志[0,1]在一列中。
示例如下:
person success wait
0 bob 0 0
1 bob 1 1
2 bob 0 0
3 bob 0 1
4 bob 1 2
5 bob 0 0
6 mary 1 1
7 mary 0 0
8 mary 0 1
9 mary 0 2
注意最后一列名为"等待"。对于这个例子,我用它计算了它。等待是在1之前的成功列中的0计数。简单来说,它是,"成功之前失败的尝试次数。
我无法通过大熊猫快速找到一种方法。我的想法是groupby(' person'),然后在等待列上运行一些功能,但不知道是什么。
有什么建议吗?
答案 0 :(得分:1)
你可以这样做:
df['ix'] = df.groupby('person')['success'].apply(
lambda x: pd.Series(0).append(x.cumsum().head(-1))
).tolist()
df['wait'] = df.groupby(['person','ix']).apply(lambda x: pd.Series(range(len(x)))).tolist()
#In [97]: df
#Out[97]:
# person success wait ix
#0 bob 0 0 0
#1 bob 1 1 0
#2 bob 0 0 1
#3 bob 0 1 1
#4 bob 1 2 1
#5 bob 0 0 2
#6 mary 1 0 0
#7 mary 0 0 1
#8 mary 0 1 1
#9 mary 0 2 1