Pandas DataFrame - 有效地计算值之间的行

时间:2016-03-11 15:03:06

标签: python pandas

我有一个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'),然后在等待列上运行一些功能,但不知道是什么。

有什么建议吗?

1 个答案:

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