我有数据
id date sec buy
5211153 2016-06-13 18:48:55 119 1
5211153 2016-06-13 18:50:54 66 0
5211153 2016-06-13 18:57:09 2 1
5211154 2016-06-13 18:57:12 118 0
5211154 2016-06-13 18:59:08 20 0
5211154 2016-06-13 18:59:34 25 0
5211154 2016-06-13 18:59:59 11 0
5211154 2016-06-13 19:00:11 12 1
我想在buy = 0
之前打印buy = 1
之前的所有数据。
我试试这段代码
for i, (id, date, buy) in enumerate(zip(ids, dates, buys)):
if buys[i] == 1:
print ids[i], dates[i]
while buys[i-1] != 1:
print dates[i - 1], buys[i - 1]
但它不是我想要的 欲望输出:
5211153 2016-06-13 18:57:09 1:
5211153 2016-06-13 18:50:54
5211154 2016-06-13 19:00:11 1:
5211154 2016-06-13 18:57:12
5211154 2016-06-13 18:59:08
5211154 2016-06-13 18:59:34
5211154 2016-06-13 18:59:59
答案 0 :(得分:1)
更新:这应该适用于您当前的样本DF,但我不确定您想要在buy
列中为备用的0和0做什么(对于例如,如果您在属于同一buy
的{{1}}列中有以下序列:1,0,1,1,0 - 在这种情况下您希望的输出是什么?)
id
OLD回答:
IIUC你可以这样做:
In [20]: df.sort_values(['id', 'date'],ascending=[1,0])[df.sort_values(['id', 'date'], ascending=[1,0]).groupby('id')['buy'].cumsum() < 2]
Out[20]:
id date sec buy
2 5211153 2016-06-13 18:57:09 2 1
1 5211153 2016-06-13 18:50:54 66 0
7 5211154 2016-06-13 19:00:11 12 1
6 5211154 2016-06-13 18:59:59 11 0
5 5211154 2016-06-13 18:59:34 25 0
4 5211154 2016-06-13 18:59:08 20 0
3 5211154 2016-06-13 18:57:12 118 0
的产率:
df.loc[(df.buy==0) & (df.buy.shift(-1)==1)]
如果您需要其他内容,请发布所需的数据集